Задать вопрос
@swyt

Почему многопоточность зависает после выполнения всех запросов?

Работа программы не завершается после выполнения всех запросов, если во время запроса хотя бы один из них получил отрицательные ответ или не дождался его. Добавления timeout в запрос не помогло. Почему это происходит?
import requests
import time
import os
import sys
from threading import Thread, current_thread
from queue import Queue

theard_count = 40

def check_url(url):
    headers = {'xxxxxxxxx': 'xxxxx'}
    res = requests.get(f'{url})', headers=headers, timeout=2)
    if res.status_code == 200: return True
    else: return False

def run(queue, result_queue):
    while not queue.empty():
        url = queue.get_nowait()
        print(f'{url} checking in thread {current_thread()}')
        status = check_url(url)
        result_queue.put_nowait((status, url))
        queue.task_done()
        print(f'{url} finished in thread {current_thread()}. Result={status}')
    print(f'{current_thread()} closing')

def main():
    start_time = time.time()
    queue = Queue()
    result_queue = Queue()
    url = ['Список ссылок']
    for j in url:
        queue.put(j)
    for i in range(theard_count):
        thread = Thread(target=run, args=(queue, result_queue)
        thread.daemon = True
        thread.start()
    queue.join()
    print(time.time() - start_time)

if __name__ == '__main__':
    main()
  • Вопрос задан
  • 114 просмотров
Подписаться 1 Простой 6 комментариев
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
22 янв. 2025, в 19:19
2300 руб./в час
22 янв. 2025, в 18:00
15000 руб./за проект
22 янв. 2025, в 17:57
2000 руб./в час