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

问题描述 投票:2回答:1

我有以下功能:

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循环在它们可用时执行期货。

我在returnexecute之前写了一份印刷声明,以确保该函数确实即将返回。

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

我希望在期货进入的同时执行。

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

python-3.x asynchronous concurrency python-multiprocessing concurrent.futures
1个回答
0
投票

而不是创建一个列表

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

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

futures = (executor.submit(execute, row) for row in fetch_row())
© www.soinside.com 2019 - 2024. All rights reserved.