我有一个Python生成器,它从数据仓库中提取了一个相当大的表。在提取数据后,我正在以分布式的方式使用芹菜处理数据。经过测试,我意识到发电机是瓶颈。它不能为芹菜工人生产足够的工作任务。这时,我决定优化我的python生成器。
关于生成器的更多细节
生成器使用块查询访问数据仓库,这些查询结果基本上是相互独立和无状态的。因此,我认为这是一个很好的选择,使其并行使用multiprocessing
模块。我环顾四周,看看如何并行化发电机,没有太多的方向。
因此,如果我的Python生成器生成无状态的数据块,这应该是多处理的一个很好的候选,对吗?有什么方法来并行python生成器吗?另外,在Python生成器中使用并行性有什么副作用我应该知道吗?
发布于 2014-11-12 22:37:23
我认为您可能试图在错误的抽象级别上解决这个问题。Python生成器本质上是有状态的,因此,如果没有某种形式的同步,就无法在进程之间拆分生成器,这将扼杀通过并行性可能实现的任何性能提升。相反,我建议为每个进程创建单独的生成器,并让它们在某种程度上相互抵消。
例如,如果有4个进程,基本上有第一个进程处理第一个块,然后它处理第5个块,然后是第9个块,然后添加N,其中N是设置的进程数。这要求您在启动时向每个进程传递一个唯一的索引。
https://stackoverflow.com/questions/26897922
复制相似问题