前言
在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()堵塞主进程等待子进程完全执行完毕。