【发布时间】:2014-11-21 17:16:21
【问题描述】:
我正在优化复杂模拟的参数。我正在使用多处理模块来提高优化算法的性能。我在http://pymotw.com/2/multiprocessing/basics.html 学到的多处理基础知识。 根据优化算法的给定参数,复杂的模拟持续不同的时间,大约 1 到 5 分钟。如果参数选择得非常糟糕,模拟可能会持续 30 分钟或更长时间,并且结果没有用处。所以我正在考虑在多处理中建立一个超时,这会终止所有持续时间超过定义时间的模拟。这是问题的抽象版本:
import numpy as np
import time
import multiprocessing
def worker(num):
time.sleep(np.random.random()*20)
def main():
pnum = 10
procs = []
for i in range(pnum):
p = multiprocessing.Process(target=worker, args=(i,), name = ('process_' + str(i+1)))
procs.append(p)
p.start()
print('starting', p.name)
for p in procs:
p.join(5)
print('stopping', p.name)
if __name__ == "__main__":
main()
p.join(5) 行定义了 5 秒的超时。由于 for 循环 for p in procs: 程序等待 5 秒直到第一个进程完成,然后再等待 5 秒直到第二个进程完成等等,但我希望程序终止所有持续超过 5 秒的进程.此外,如果没有一个进程持续超过 5 秒,则程序不得等待这 5 秒。
【问题讨论】:
-
看看这里:stackoverflow.com/q/1191374/2615940。它可能是重复的,但我不确定是否足以为您标记它。如果针对该答案的建议解决方案不适合您,请告诉我们原因。
-
这是一篇有趣的文章,但在我看来,它是连续启动进程而不是同时启动进程的解决方案。我的程序应该同时启动进程并杀死那些超过“全局”超时的进程。
标签: python timeout python-multiprocessing