代码之家  ›  专栏  ›  技术社区  ›  Jose

for循环未在并行代码中异步执行

  •  2
  • Jose  · 技术社区  · 7 年前

    我有以下功能:

    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循环执行将来可用时,应该异步填充。

    我在 return execute 以确保函数确实即将返回。

    似乎函数确实在并行地提交作业,它们正在返回,但for循环没有执行 作为 这些工作岗位正从各自的流程中返回,但只有在列表完全建立之后。

    我想在未来到来的同时执行。

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   MarianD    7 年前

    而不是创建一个列表

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

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