首页 > 解决方案 > While 循环使用 concurrent.futures ProcessPoolExecutor

问题描述

对于一个项目,我需要使用 Python 完成许多任务。我想使用多个进程并让程序运行(非常)长时间。因此,我想对模块 concurrent.futures 使用 while 循环。

我猜这不是一个好主意,但现在我只是使用一个内部数字很大的 for 循环,这也不是那么好。

也许我需要创造一个未来,每次结束?我不知道如何处理

我的代码非常简化的版本如下所示:

from concurrent.futures import ProcessPoolExecutor, as_completed

def task(n):
    print(f'Task {n} started...')
    time.sleep(10)  # Reaally long task
    print(f'Task {n} ended.')
    return n

numbers = range(0, 10)
with ProcessPoolExecutor(max_workers=2) as executor:
    futures = [executor.submit(task, number) for number in numbers]

    for future in as_completed(futures):
        print(f'future job n°{future.result()} ended')

欢迎任何帮助:) 谢谢!

编辑:我最终做了什么

from concurrent.futures import ProcessPoolExecutor, as_completed
import time


def task(n):
    # print(f'Task {n} started...')
    time.sleep(1)  # Reaally long task
    # print(f'Task {n} ended.')
    return n


number = 12
step_size = 3
while True:
    numbers = range(number, number + step_size)
    with ProcessPoolExecutor(max_workers=2) as executor:
        futures = [executor.submit(task, number) for number in numbers]

        for future in as_completed(futures):
            print(f'future job n°{future.result()} ended')
    number += step_size

标签: pythonwhile-loopmultiprocessingpython-multiprocessingconcurrent.futures

解决方案


推荐阅读