在函数的最后包含proc.terminate()
和proc.join()
以确保multiprocessing
进程在完成后关闭/关闭/终止是不错的做法有它的工作(已经达到它运行的功能的结束)?
从测试开始,我发现似乎每个multiprocessing
进程都自行终止,而不需要用proc.terminate()
隐式终止它。但我仍然希望确保在函数结束时终止该过程是不必要的。
import time
import multiprocessing as mp
def myFunct(arg):
proc=mp.current_process()
print 'starting:', proc.name, proc.pid,'...\n'
for i in range(110):
for n in range(500000):
pass
print '\t ...', proc.name, proc.pid, 'completed\n'
print 'Is proc alive:', proc.is_alive()
proc.terminate()
print 'TERMINATED:', proc.is_alive()
proc.join()
print 'JOINED:', proc.is_alive()
pool = mp.Pool(processes=2)
pool.map_async( myFunct, [1,2,3])
pool.close()
pool.join()
答案 0 :(得分:3)
不,没有必要。事实上,它在docs:
中明确表示不鼓励请注意start(),join(),is_alive(),terminate()和exitcode 方法只应由创建该进程的进程调用 对象强>
您不应该在工作职能部门内调用terminate
和join
。当您使用multiprocessing.pool
时,池中的进程将保持打开状态
pool.close()
在您的情况下,您在拨打pool.close
电话后立即致电map_async
,因此一旦他们完成处理,池中的流程就会关闭。 pool.join
调用将确保程序等待,直到关闭为止。