@kiddle

При как обстоятельствах закрывается поток в Python?

Здравствуйте, начал знакомится с многопоточностью.
У меня программа запускает 3 потока, каждый парсит информацию. Почему так происходит? Если надо, я приложу код. И сколько максимум потоков можно запустить и на сколько это будет эффективно?

for _ in range(thread_col):
                        t = Thread(target=parse_info_from_link)
                        t.start()
  • Вопрос задан
  • 1858 просмотров
Пригласить эксперта
Ответы на вопрос 1
adugin
@adugin Куратор тега Python
Для парсинга информации используйте асинхронное программирование (в Python 3.5+ стандартный модуль asyncio и внешняя библиотека aiohttp) и не занимайтесь ерундой с многопоточностью. Вот кусок кода из моего собственного проекта с вебсокетами:
async def run(self):
    if not self.chains:
        return
    command = f'{{"command": "subscribe", "channel": "{self.name}"}}'
    while True:
        await asyncio.sleep(len(self.exchange.markets)*random())
        try:
            async with websockets.connect(self.wss, max_queue=0) as self.websocket:
                await asyncio.wait_for(self.websocket.send(command), timeout=10)
                while True:
                    data = await asyncio.wait_for(self.websocket.recv(), timeout=20)
                    data = json.loads(data, cls=DeepDecoder)
                    asyncio.ensure_future(self.process_websocket_message(data))
        except asyncio.TimeoutError as error:
            print(f'{self.name}: WEBSOCKET_TIMEOUT: {error}')
        except websockets.ConnectionClosed as error:
            print(f'{self.name}: WEBSOCKET_CLOSED: {error}')
        except (asyncio.CancelledError, KeyboardInterrupt, SystemExit) as error:
            print(f'{self.name}: TASK_CANCELLED: {error}')
            self.clear()
            return
        except Exception as error:
            print(f'{self.name}: {error}')
        finally:
            self.clear()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы