import concurrent.futures
import time
# 定义一个函数,用来模拟任务的执行
def task(name, duration):
print(f'Task {name} started')
time.sleep(duration)
print(f'Task {name} finished')
return name
# 创建一个最多有 3 个线程的线程池
with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
# 提交 6 个任务
tasks = {executor.submit(task, f'Task{i}', i): i for i in range(1, 7)}
# 按照任务完成的顺序输出结果
for future in concurrent.futures.as_completed(tasks):
result = future.result()
print(f'Task {result} completed')
上述代码定义了一个 task 函数,模拟了一个任务需要执行一段时间的情况,然后创建了一个最多有 3 个线程的线程池,并提交了 6 个任务。使用 concurrent.futures.as_completed 函数来获取已完成的任务的结果,并按照任务完成的顺序输出结果。
Task 1 started
Task 2 started
Task 3 started
Task 1 finished
Task 4 started
Task 2 finished
Task 5 started
Task 6 started
Task 3 finished
Task 4 finished
Task 5 finished
Task 6 finished
Task 1 completed
Task 2 completed
Task 3 completed
Task 4 completed
Task 5 completed
Task 6 completed