我正在对一个复杂的模拟程序进行参数优化,使用了multiprocessing模块来提高优化算法的性能。我在http://pymotw.com/2/multiprocessing/basics.html学习了multiprocessing的基础知识。
不同参数下的模拟持续时间不同,大约为1到5分钟。如果选择的参数非常糟糕,模拟可能需要30分钟甚至更长时间,而结果也是无用的。因此,我考虑在multiprocessing中加入超时功能,以终止持续时间超过指定时间的所有模拟。以下是该问题的摘要:
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秒。