我在做一个复杂模拟的参数优化。采用多处理模块提高了优化算法的性能。我在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秒。 最佳答案
您可以通过创建一个循环来实现这一点,该循环将等待一定的超时时间(秒),并经常检查所有进程是否都已完成。如果它们没有在分配的时间内全部完成,则终止所有进程:
TIMEOUT = 5
start = time.time()
while time.time() - start <= TIMEOUT:
if any(p.is_alive() for p in procs):
time.sleep(.1) # Just to avoid hogging the CPU
else:
# All the processes are done, break now.
break
else:
# We only enter this if we didn't 'break' above.
print("timed out, killing all processes")
for p in procs:
p.terminate()
p.join()
关于python - Python多处理模块:使用超时连接进程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26063877/