Многопоточность: как избежать зависания, вызванного ошибкой рабочего потока - PullRequest
0 голосов
/ 08 марта 2019

Я создал скрипт, который выполняет несколько потоков, где каждый поток делает запрос к API для получения некоторых данных. К сожалению, один из потоков может столкнуться с ошибкой отключения (возможно, из-за перегрузки API сайта), и в результате весь скрипт Python зависает на неопределенное время ... Как я могу заставить скрипт корректно завершить работу, когда один из рабочих темы имеет ошибку отключения? Я думал, что использование terminate закроет поток.

Мой код:

runId = sys.argv[1]
trth = TrThDownload(runId)
data = trth.data
concurrences = min(len(data),10)
p = pool.ThreadPool(concurrences)
p.map(trth.runDownloader, data)
p.terminate()
p.close()
p.join()

1 Ответ

0 голосов
/ 08 марта 2019

Вы действительно должны попробовать асинхронное программирование.Я предпочитаю gevent.В верхней части вашего сценария просто сделайте это:

import gevent
gevent.monkey.patch_all()

Кроме того, не закрывайте и не закрывайте до присоединения.Просто используйте объединение.

...