有没有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()