Я использую многопроцессорный пул для параллельного запуска пакета заданий. Я хочу дать каждой работе 2 секундный срок. То есть я хочу убить задание, если оно занимает более 2 секунд, и перейти к следующему заданию.
Вот мой код
from multiprocessing import Pool, TimeoutError
import time
import os
import random
def f():
time.sleep(3)
return True
if __name__ == '__main__':
with Pool(processes=8) as pool:
multiple_results = [pool.apply_async(f, ()) for i in range(16)]
for res in multiple_results:
try:
print (res.get(timeout=2)),
except:
print ("TO"),
Я ожидаю, что будет напечатано 16 TO s, однако я получу TO True True True True ... Это означает, что большая часть выполнения функции f будет успешной , Я не ожидал этого, так как думал, что установил тайм-аут на 2 секунды для каждого порожденного процесса.
У меня возникли некоторые недоразумения по поводу использования функции apply_async? Или есть лучший способ добиться того, что я хочу сделать?