我有一个模型,我希望与之并行运行超过6小时:
pool = multiprocessing.Pool(10)
for subModel in self.model:
pool.apply_async(self.compute, subModel, features)
pool.close()
pool.join()
现在问题太慢了,因为我必须每次调用pool = multiprocessing.Pool(10)和pool.join()来构造和解构10个线程,而模型在6小时内运行数吨。
我认为解决方案是让10个线程在后台运行,这样每当有新数据进入时,它就会立即进入模型而不用担心创建新线程并解构它们会浪费很多时间。
在python中是否有一种方法可以让你有一个长时间运行的过程,这样你就不需要一遍又一遍地启动和停止?
答案 0 :(得分:1)
在向其提交一组任务后,您不需要close()
和join()
(并销毁)Pool
。如果您想要确保apply_async()
已完成,请先致电apply()
,然后再使用相同的Pool
。或者,如果您在等待任务时可以执行其他操作,请保存apply_async
返回的结果对象,并在未完成后继续调用wait()
。