Фикс времени в тайм-ауте многопроцессорного процесса - PullRequest
0 голосов
/ 16 мая 2018

Я пытался настроить код параллельных заданий, используя многопроцессорный модуль. Я хотел бы прекратить всю работу ребенка в течение 10 секунд. Я сделал следующий код, используя аргумент timeout в функции присоединения к процессу. Однако я обнаружил, что время завершения всех заданий зависит как от значений времени ожидания, так и от числа заданий. Как рассчитать точное время?

import time
from multiprocessing import Manager, Process

def f(x, dic):
    time.sleep(60)
    print "Time: ", x
    dic[x] = "Done"

mng = Manager()
dic = mng.dict()
jobs = [Process(target=f, args=(i, dic)) for i in range(50)]

for job in jobs:
    job.start()

for job in jobs:
    job.join(timeout=10)

for job in jobs:
    job.terminate()

for job in jobs:
    job.join()

print dic.keys()

1 Ответ

0 голосов
/ 16 мая 2018

Вы можете сначала рассчитать время ожидания в десять секунд, а затем ждать и завершать задания в одном цикле. Вы только ждете, если тайм-аут не наступил.

end_at = time.time() + 10
while jobs:
    job = jobs.pop()
    delta = end_at - time.time()
    if delta > 0:
        job.join(timeout=delta)
    job.terminate()
    job.join()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...