我有一个Python生成器,它从数据仓库中提取了一个非常大的表.在提取数据后,我正在以分布式方式使用芹菜处理数据.经过测试,我意识到发电机是瓶颈.它无法为芹菜工人提供足够的工作.这是我决定优化我的python生成器的时候.
关于发电机的更多细节
生成器使用块查询命中数据仓库,这些查询结果基本上彼此独立且无状态.所以我认为这是使用该multiprocessing
模块使其并行的一个很好的候选者.我环顾四周如何在没有太多方向的情况下并行化生成器.
因此,如果我的Python生成器生成无状态数据块,那么这应该是多处理的良好候选对吗?有没有办法并行化python生成器?还有任何副作用,我应该注意在Python生成器中使用并行性?
我想你可能正试图在错误的抽象层次上解决这个问题.Python生成器本质上是有状态的,因此您无法在没有某种形式的同步的情况下跨进程拆分生成器,这将消除您通过并行性可能实现的任何性能提升.我建议为每个进程创建单独的生成器,并使它们相互偏移.
例如,如果你有4个进程,你基本上让第一个进程处理第一个进程,然后处理第5个进程块,然后是第9个进程块,依此类推,添加N,其中N是你设置的进程数.这要求您在启动时将每个进程的唯一索引移交给它.