【问题标题】:Fix time in timeout of multiprocessing process修复多处理进程超时时间
【发布时间】:2018-10-25 20:18:30
【问题描述】:

我试图使用多处理模块设置并行作业代码。我想在 10 秒内终止所有子作业。我在进程连接函数中使用超时参数制作了以下代码。但是,我发现所有作业的终止时间取决于超时值和作业数量。如何计算准确的时间?

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()

【问题讨论】:

    标签: python multithreading timeout


    【解决方案1】:

    您可以先计算十秒超时,然后在一个循环中等待并终止作业。您只有在超时尚未到达时才等待。

    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()
    

    【讨论】:

    • 感谢您最简单的回答。我刚刚在job.start() 之后添加了您提到的行。它运行良好。
    猜你喜欢
    • 1970-01-01
    • 2021-12-23
    • 2014-11-21
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 2019-02-16
    • 1970-01-01
    相关资源
    最近更新 更多