下面是一个示例代码,展示了如何在Python中并行执行一组有序的阻塞任务:
import time
from concurrent.futures import ThreadPoolExecutor, as_completed
# 模拟阻塞任务
def blocking_task(task_id):
print(f"开始执行任务 {task_id}")
time.sleep(2) # 模拟任务执行时间
print(f"完成任务 {task_id}")
return task_id
# 一组有序的阻塞任务
tasks = [1, 2, 3, 4, 5]
with ThreadPoolExecutor() as executor:
# 创建一个Future对象列表
future_tasks = [executor.submit(blocking_task, task) for task in tasks]
# 按照任务顺序获取已完成的任务结果
for future in as_completed(future_tasks):
result = future.result()
print(f"任务 {result} 已完成")
在上面的代码中,我们首先定义了一个模拟的阻塞任务blocking_task
,该任务会打印开始执行和完成的消息,并模拟任务执行时间。
然后,我们定义了一组有序的阻塞任务列表tasks
,其中每个任务由一个唯一的标识符表示。
使用ThreadPoolExecutor
创建一个线程池,并使用submit
方法提交每个任务到线程池中执行,返回一个Future
对象。
通过as_completed
函数可以迭代已完成的任务的Future
对象,按照任务的顺序获取其结果。在这个示例中,我们简单地打印出每个任务的完成消息。
注意,as_completed
函数返回的是一个迭代器,因此可以在任务完成的同时进行处理,而不需要等待所有任务完成。
上一篇:并行执行所需时间比串行执行更长