anijackich
@anijackich

Почему threading останавливается после запуска нескольких потоков?

У меня есть блок кода:
result = []
        def parse(i):
            try:
                request_phrase = ' '.join(
                    [words_from_img[x] for x in range(i, i + 10)])
                doujin_page = requests.get(f'https://somesite.com/search?search={request_phrase}')
                soup = BeautifulSoup(doujin_page.content, 'html.parser')
                problem_ids = [i.text.split()[-1]  for i in soup.find_all('span', {'class': 'prob_nums'})]

                for id in problem_ids:
                    if id not in result:
                        result.append(id)
            except Exception as E:
                pass

        thread_pool = []

        for i in range(0, len(words_from_img)):
            thread = threading.Thread(target=parse, args=(i,))
            thread_pool.append(thread)
            thread.start()

        for thread in thread_pool:
            thread.join()

Который по идее должен парсить страницы сайта с разными поисковыми ответами.
Но после генерации нескольких потоков, программа просто перестает выполняться, т.е. как будто бы зависает
  • Вопрос задан
  • 58 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Во-первых, надо убрать перехват широких исключений. Во-вторых, надо добавить побольше отладочного вывода и погонять под дебагером, чтобы понять, что именно значит "просто перестает выполняться". Напрашивающееся предположение, что somesite.com обнаруживает парсинг, блокирует доступ, в функции parse возникает исключение, которые вы молча проглатываете и поток завершает работу.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы