欢迎访问宙启技术站
智能推送

任务并行性控制:使用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()函数可以方便地控制任务的并行性,从而提高程序的执行效率。