Я изучаю concurrent.futures
(переход от threading
), и мне не удается понять, как именно работает отправка и ожидание.
Рассмотрим следующий код: запущены два потока, один из которых предположительнонемедленно завершается, в то время как другой зависает на неопределенный срок.
Я ожидал, что оба потока будут отслеживаться через submit()
, и управление немедленно возвращается основной программе.
После этого wait()
с таймаутом вернет кортеж из потоков done
и not_done
(not_done
будет принудительно прерван из-за таймаута).
import concurrent.futures
import time
def worker(wait_infinite):
if wait_infinite:
time.sleep(100)
with concurrent.futures.ThreadPoolExecutor() as executor:
inf = executor.submit(worker, True)
not_inf = executor.submit(worker, False)
res = concurrent.futures.wait([inf, not_inf], timeout=2)
print(res)
В результате происходит зависание выполнения not_inf = executor.submit(worker, False)
. Почему управление не возвращается основной программе?