我有以下功能:
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文件中读取的生成器。
而不是创建一个列表
futures = [executor.submit(execute, row) for row in fetch_row()]
创建一个生成器(括号而不是括号):
futures = (executor.submit(execute, row) for row in fetch_row())