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这一行代码处。
总之,通过使用进程池,我们可以方便地实现多任务的并发执行,提高程序的执行效率。同时,由于进程池是可重复使用的,可以避免频繁地创建和销毁进程的开销。
