Задать вопрос
@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()
  • Вопрос задан
  • 121 просмотр
Подписаться 1 Простой 6 комментариев
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
Greenway Global Новосибирск
от 150 000 ₽
SPA2099 Москва
До 100 000 ₽
HR Prime Москва
от 300 000 до 3 800 000 ₽