我正在使用renderfarm,我需要我的客户端能够启动渲染器的多个实例,而不会阻塞,因此客户端可以接收新命令。我的工作正常,但是我无法终止创建的流程。python多处理池终止
在全球层面上,我定义我的游泳池(这样我可以从任何函数访问):
p = Pool(2)
然后我打电话给我的渲染器apply_async:
for i in range(totalInstances):
p.apply_async(render, (allRenderArgs[i],args[2]), callback=renderFinished)
p.close()
该功能完成,在后台启动进程,并等待新的命令。我做了一个简单的命令,将杀死客户端,并停止呈现:
def close():
'close this client instance'
tn.write ("say "+USER+" is leaving the farm\r\n")
try:
p.terminate()
except Exception,e:
print str(e)
sys.exit()
sys.exit()
它似乎并没有给出错误(这将打印错误),蟒蛇终止但后台进程仍运行。任何人都可以推荐一种更好的方式来控制这些启动的程
尝试启用调试日志记录'from multiprocessing import util; util.get_logger().setLevel(util.DEBUG)'并粘贴输出。 – schlamar 2013-05-06 14:48:03
我以前见过类似这样的行为,但现在无法重现它......我不知道在调用p.terminate()之后调用p.join()会有所帮助吗?我还想知道,如果你甚至需要调用terminate,并且只是在执行sys.exit()会正确地垃圾收集池及其所有进程。 – mdscruggs 2013-05-06 15:21:15
当我尝试启用日志记录时,我在控制台中得到了这个:“没有处理程序可以找到logger”multiprocessing“。不幸的是,p.terminate()之后的p.join()没有什么区别,sys .exit()关闭python,但让进程在后台运行。 – tk421storm 2013-05-07 15:37:16