使用多处理模块并行访问python生成器

时间:2014-11-12 22:30:25

标签: python parallel-processing generator

我有一个Python生成器,它从数据仓库中提取了一个非常大的表。在提取数据后,我正在以分布式方式使用芹菜处理数据。经过测试,我意识到发电机是瓶颈。它无法为芹菜工人提供足够的工作。这是我决定优化我的python生成器的时候。

有关生成器的更多详细信息

生成器使用块查询命中数据仓库,这些查询结果基本上彼此独立且无状态。所以我认为这是使用multiprocessing模块使其并行的一个很好的候选者。我环顾四周如何在没有太多方向的情况下并行化生成器。

因此,如果我的Python生成器生成无状态数据块,那么这应该是多处理的好选择吗?有没有办法并行化python生成器?还有任何副作用我应该注意在Python生成器中使用并行性吗?

1 个答案:

答案 0 :(得分:8)

我认为你可能正试图在错误的抽象层次上解决这个问题。 Python生成器本质上是有状态的,因此您无法在没有某种形式的同步的情况下跨进程拆分生成器,这将消除您可能通过并行性实现的任何性能提升。我建议为每个进程创建单独的生成器,让它们从彼此偏移开始。

例如,如果你有4个进程,你基本上让第一个进程处理第一个进程,然后处理第5个进程后跟第9个进程块,依此类推,添加N,其中N是你设置的进程数。这要求您在启动时将每个进程的唯一索引移交给它。