任务并行性控制:使用concurrent.futuresas_completed()在Python中实现
发布时间:2024-01-02 11:58:31
在Python中,可以使用concurrent.futures模块中的as_completed()函数来控制任务的并行性。as_completed()函数可以针对一组任务返回一个迭代器,在每个任务完成时返回一个Future对象,并按照它们完成的顺序返回。
下面是一个简单的使用concurrent.futuresas_completed()函数的示例,该示例使用as_completed()函数并行运行一组任务,然后按照它们完成的顺序输出结果。
import concurrent.futures
# 任务函数,接收一个参数并返回结果
def task(num):
return num * num
# 创建线程池
with concurrent.futures.ThreadPoolExecutor() as executor:
# 提交任务到线程池,返回Future对象
futures = [executor.submit(task, i) for i in range(10)]
# 使用as_completed()函数返回一个迭代器,按照任务完成的顺序返回
for future in concurrent.futures.as_completed(futures):
# 获取任务结果
result = future.result()
print(result)
在上面的例子中,我们首先定义了一个任务函数task(),它接收一个参数并返回参数的平方。随后,我们使用ThreadPoolExecutor创建了一个线程池,并通过submit()方法将任务任务提交到线程池中,然后返回一个Future对象列表。
接下来,我们使用as_completed()函数返回一个迭代器,在每个任务完成时返回一个Future对象。在for循环中,我们可以通过future.result()获取任务的结果,并打印出来。
值得注意的是,使用ThreadPoolExecutor时,任务会并行执行,但是输出的结果是按照任务完成的顺序输出的。
除了ThreadPoolExecutor,还可以使用ProcessPoolExecutor来执行任务,实现多进程的并行性。只需要将上面的代码中的ThreadPoolExecutor替换为ProcessPoolExecutor即可。
总结起来,使用concurrent.futures库的as_completed()函数可以方便地控制任务的并行性,从而提高程序的执行效率。
