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

Python中的进程池实现多任务并发执行

发布时间:2023-12-29 07:59:55

在Python中,可以使用multiprocessing模块中的进程池实现多任务并发执行。进程池是一组可重复使用的进程,通过减少创建和销毁进程的开销,提高了程序执行效率。

首先,我们需要导入multiprocessing模块中的Pool类。该类可以用来创建一个进程池,并提供了一些方法来提交任务和获取结果。

下面是一个使用进程池实现多任务并发执行的例子:

import time
from multiprocessing import Pool

# 定义一个任务函数
def task(n):
    print(f'任务{n}开始执行')
    time.sleep(2)  # 模拟任务执行时间
    print(f'任务{n}执行完成')
    return n * 2

if __name__ == '__main__':
    # 创建一个进程池,指定最大同时执行的进程数量为5
    pool = Pool(processes=5)

    # 提交任务到进程池
    results = []
    for i in range(1, 11):
        result = pool.apply_async(task, args=(i,))
        results.append(result)

    # 关闭进程池
    pool.close()

    # 等待所有任务执行完成
    pool.join()

    # 获取任务执行结果
    for result in results:
        print(result.get())

在上述例子中,我们定义了一个名为task的任务函数,接受一个参数n,并且在函数中使用time.sleep方法模拟了任务的执行时间。任务执行完成后,函数会返回参数n的两倍。

在主程序中,我们首先创建了一个进程池对象pool,并通过processes参数指定最大同时执行的进程数量为5。然后,利用for循环提交了10个任务到进程池中,每个任务都调用task函数,并传入不同的参数。我们将每个任务的执行结果保存到一个列表results中。

接着,我们调用pool.close方法关闭进程池,再调用pool.join方法等待所有任务执行完成。最后,我们通过result.get方法获取任务的执行结果,并打印出来。

运行以上代码,可以看到输出的结果中,任务的执行时间会有重叠,因为进程池中的进程会同时执行多个任务。同时,可以观察到主程序在等待所有任务执行完成期间,会阻塞在pool.join这一行代码处。

总之,通过使用进程池,我们可以方便地实现多任务的并发执行,提高程序的执行效率。同时,由于进程池是可重复使用的,可以避免频繁地创建和销毁进程的开销。