我正在使用pathos.Pool
,但我认为所需的技术与 `multiprocessing.Pool 中的技术相当。
我有一个生成器,可以产生大量(大量)要做的事情。
from pathos import ProcessingPool
def doStuff(item):
return 1
pool = ProcessingPool(nodes=32)
values = pool.map(doStuff, myGenerator)
不幸的是,应用于我生成的项目(此处:)的功能doStuff
很快就会清除。因此,到目前为止,我一直无法通过序列化来提高速度——事实上,代码的多处理版本比原始版本运行得慢。
我认为这是因为与工作人员完成任务所需的时间相比,将下一个项目从池中交付给工作人员的开销很大。
我想解决方案是将生成的项目“分块”:将项目分组到n
列表中,然后将它们提供给包含n
许多工人的池(因为所有工作都需要几乎完全一样的时间)。或者也许是一个不太极端的版本。
在 Python 中实现这一目标的好方法是什么?