【问题标题】:Accessing python generators in parallel using multiprocessing module使用多处理模块并行访问 python 生成器
【发布时间】:2014-11-12 22:30:25
【问题描述】:

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

更多关于生成器的细节

生成器通过块查询命中数据仓库,这些查询结果基本上是相互独立且无状态的。所以我认为这是使用multiprocessing 模块使其并行的好选择。我环顾了如何在没有太多方向的情况下并行化生成器获取。

因此,如果我的 Python 生成器生成无状态数据块,这应该是多处理的理想选择,对吧?有什么方法可以并行化 python 生成器?在 Python 生成器中使用并行性还有哪些副作用需要注意?

【问题讨论】:

    标签: python parallel-processing generator


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-21
      • 2017-06-21
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      • 2015-01-03
      • 1970-01-01
      相关资源
      最近更新 更多