【发布时间】: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