我正在开发一个渲染农场,我需要我的客户能够启动渲染器的多个实例,而不会阻塞,以便客户端可以接收新命令。我已经正常工作了,但是我在终止创建的进程时遇到了麻烦。
在全局级别,我定义了我的池(以便我可以从任何函数访问它):
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()
它似乎没有给出错误(它会打印错误),python 终止但后台进程仍在运行。谁能推荐一种更好的方法来控制这些启动的程序?