concurrent.futures.as_completed,如果后续没有其他任务,该功能没什么用

54 阅读1分钟

有没有concurrent.futures.as_completed,并发执行的顺序都是一样的。 该功能是为了方便后续任务的处理,但是如果该任务已经是最后一步任务,建议不要用它,没有意义,只会打乱任务的顺序

import concurrent.futures
import time


def now():
    return time.strftime("%M:%S", time.localtime())


def task(x):
    if x == 1:
        print(f"{now()} Task {x} started, will sleep 10s")
        time.sleep(10)
    else:
        print(f"{now()} Task {x} started, will sleep 2s")
        time.sleep(2)
    print(f"{now()} Task {x} finished")
    return x


with concurrent.futures.ThreadPoolExecutor(4) as executor:
    futures = [executor.submit(task, i) for i in range(1, 9)]
    # for future in concurrent.futures.as_completed(futures):
    for future in futures:
        future.result()