Я пытаюсь использовать ThreadPoolExecutor
в Python 3.6 в Windows 7, и мне кажется, что исключения игнорируются или останавливают выполнение программы. Пример кода:
#!/usr/bin/env python3
from time import sleep
from concurrent.futures import ThreadPoolExecutor
EXECUTOR = ThreadPoolExecutor(2)
def run_jobs():
EXECUTOR.submit(some_long_task1)
EXECUTOR.submit(some_long_task2, 'hello', 123)
return 'Two jobs was launched in background!'
def some_long_task1():
print("Task #1 started!")
for i in range(10000000):
j = i + 1
1/0
print("Task #1 is done!")
def some_long_task2(arg1, arg2):
print("Task #2 started with args: %s %s!" % (arg1, arg2))
for i in range(10000000):
j = i + 1
print("Task #2 is done!")
if __name__ == '__main__':
run_jobs()
while True:
sleep(1)
Выход:
Task #1 started!
Task #2 started with args: hello 123!
Task #2 is done!
Он висит там, пока я не убью его с помощью Ctrl + C.
Однако, когда я удаляю 1/0
из some_long_task1
, задача № 1 завершается без проблем:
Task #1 started!
Task #2 started with args: hello 123!
Task #1 is done!
Task #2 is done!
Мне нужно как-то зафиксировать исключения, возникающие в функциях, работающих в ThreadPoolExecutor
.
Python 3.6 (Minconda), Windows 7 x64.