[python]多进程multiprocessing.Pool()类的map()方法的使用

2,844 阅读1分钟

前言

在python中,只有多进程才可以充分利用CPU的资源,适合CPU密集型任务(计算密集型任务,区别于I/O密集型),其他的就不多说了。
这里介绍一个pool.map()方法,很实用!

代码

import time
import multiprocessing

def f1(i):
    return i * 2

if __name__ == '__main__':
    time1 = time.time()
    nums_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    # processes参数根据具体的情况来设置,如果不设置,则操作系统会根据实际的情况来决定执行多少进程
    pool = multiprocessing.Pool(processes=5) 
    
    # map()函数的输入结果是有顺序的,其顺序和nums_list的顺序相同
    result = pool.map(f1, nums_list)  
    
    pool.close()        # 关闭进程池,不再接受新的进程
    pool.join()         # 主进程阻塞等待子进程的退出

    print(result)
    
    time2 = time.time()
    print("计算用时:", time2-time1)

# 运行结果
# [2, 4, 6, 8, 10, 12, 14, 16, 18]
# 计算用时: 0.21639275550842285

#解释说明:
#1.看到Pool类在初始化的时候,有一个processes参数,这个参数可以不设置,
   #如果不设置该参数,则系统会跟根据计算机的实际情况来决定要运行多少个进程,
   #我们也可自己设置,但是要考虑自己计算机的性能,一般要<计算机的核心数。

#2.map()函数。需要传递两个参数,第一个参数就是需要引用的函数,第二个参数是一个可迭代对象,
   #它会把需要迭代的元素一个个的传入函数中。
   #因为我们的map会自动将数据作为参数传进去

#3.pool()开启了,不要忘记pool.close()关闭进程池和pool.join()堵塞主进程等待子进程完全执行完毕。