gpt4 book ai didi

python - 多处理过程是否必须在调用的函数结束时终止?

转载 作者:太空宇宙 更新时间:2023-11-04 01:16:40 25 4
gpt4 key购买 nike

在函数的最后包含 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()

最佳答案

不,没有必要。事实上,docs 中明确不鼓励这样做。 :

Note that the start(), join(), is_alive(), terminate() and exitcode methods should only be called by the process that created the process object.

您不应该在您的辅助函数中调用 terminatejoin。当您使用 multiprocessing.pool 时,池中的进程将保持打开状态

  1. 只要你还没有调用pool.close()
  2. 只要进程在工作。

在您的例子中,您在调用 map_async 后立即调用 pool.close,因此池中的进程将在完成后立即关闭加工。 pool.join 调用将确保您的程序一直等到关闭。

关于python - 多处理过程是否必须在调用的函数结束时终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24100028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com