蟒蛇继续使用相同的线程持续时间长为长时间运行过程
问题描述:
我有我想保持运行超过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有没有办法让你有很长的运行过程,这样你就不需要一遍又一遍地重新开始和停止了?
答
在向其提交一组任务后,您不需要close()
和join()
(并销毁)Pool
。如果您想确保您的apply_async()
已完成,请拨打apply()
,下次再使用相同的Pool
。或者,如果您在等待任务时可以做其他事情,请保存由apply_async
返回的结果对象,并在其上面调用wait()
,一旦无法继续完成。
+0
thx很多Sneftel –
您是否知道一次只能运行1个python线程,使其不适合获得性能? – nwp
我以为multiprocessing.pool,与GIL的线程类不同,可以让你同时运行多个线程 –
@nwp'multiprocessing.Pool'不受GIL的影响。虽然提到池有“线程”是不正确的。 – Sneftel