【问题标题】:for loop not executing asynchronously in parallel codefor循环不在并行代码中异步执行
【发布时间】:2018-09-17 21:00:29
【问题描述】:

我有以下功能:

with ProcessPoolExecutor(max_workers=None) as executor:
            futures = [executor.submit(execute, row) for row in fetch_row()]
            for future in as_completed(futures):
                # do something

根据我的理解,futures 应该是异步填充的,而 for 循环会在未来可用时执行它们。

我在execute 中的return 之前写了一个打印语句,以确保该函数确实即将返回。

似乎该函数确实在并行提交作业,并且它们正在返回,但是 for 循环没有执行因为作业正在从各自的进程返回,但只有在列表之后完全建成。

我想在期货进入的同时执行 for。

fetch_row() 是一个只读取 CSV 文件的生成器。

【问题讨论】:

  • 从 csv 文件中读取会使您的进程受到 IO 限制。在这种情况下,多处理可能效率较低。

标签: python-3.x asynchronous concurrency python-multiprocessing concurrent.futures


【解决方案1】:

而不是创建一个列表

futures = [executor.submit(execute, row) for row in fetch_row()]

创建一个生成器(括号而不是括号):

futures = (executor.submit(execute, row) for row in fetch_row())

【讨论】:

  • 那没有效果,直到所有的期货都准备好之前,for循环仍然不会执行。
猜你喜欢
  • 1970-01-01
  • 2020-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-13
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多