Некоторые причины, по которым ThreadPoolExecutor может некорректно завершать выполнение задач:
- Неправильное использование функции shutdown(). 35 В Python 3.7 и 3.8 она только останавливает ThreadPoolExecutor от приёма новых задач. 5 Если одна из задач завершается с ошибкой, другие, которые ещё не начали выполняться и находятся в очереди задач исполнителя, не отменяются. 5 В Python 3.9 функцию обновили, чтобы пользователи могли отменять незапущенные задачи в очереди исполнителя. 5
- Неправильная подача задач. 3 Рекомендуется, чтобы задачи подавались в ThreadPoolExecutor только из одного контекста, например, из точки в программе, где ThreadPoolExecutor создан и закрыт. 3 Для этого можно использовать очередь или другую структуру данных, которая соединит функции задач или функции обратного вызова с основным потоком. 3
- Неотловленные ошибки. 4 Если код падает с ошибкой, которую не отлавливают, а проглатывают, то кажется, что поток начал выполнять следующий код, пока идёт ожидание. 4 На самом деле попытка ожидания упала в ошибку, и выполнение кода прекратилось. 4
Для выявления причин некорректного завершения задач и их устранения рекомендуется обратиться к специалисту.