- 创建进程池,在池内放入合适数量的进程
- 将时间加入进程池的等待队列
- 使用进程池内的进程不断的执行等待事件
- 所有事件处理结束后关闭回收进程池
import multiprocessing as mp
from time import sleep
import os
def worker(msg):
sleep(2)
print(msg)
#创建进程池对象,进程池包含4个进程
pool=mp.Pool(processes=4) #系统类形参名字不能改变,需为:processes
for i in range(10):
msg="Hello %d"%i
#向进程池中加入要执行的事件
pool.apply_async(worker,(msg,))
#关闭进程池事件加入通道
#执行后不能再向进程池加入事件
pool.close()
#阻塞等待进程池处理事件结束后回收进程池
pool.join()
Pool
功能:创建进程池
参数:processes 进程池中进程的数量
apply_async()
功能:以异步的方式将要执行的事件放入进程池
参数:fun #要执行的函数
args #给函数按位置传参
kids:#给函数按照键值传参
close()
功能:关闭进程池,使其不能再加入新的事件
join()
功能:阻塞等待进程池将事件都执行结束后回收进程池。
举例:
import multiprocessing as mp
from time import sleep
import os
def worker(msg):
sleep(2)
print(msg)
return "worker return" +msg
#创建进程池对象,进程池包含4个进程
pool=mp.Pool(processes=4) #系统类形参名字不能改变,需为:processes
result=[]
for i in range(10):
msg="Hello %d"%i
#向进程池中加入要执行的事件
r=pool.apply_async(worker,(msg,))
# pool.apply(worker,(msg,)) 猫眼执行
result.append(r)
#获取每个事件函数的返回值
for res in result:
print(res.get())
#关闭进程池事件加入通道
#执行后不能再向进程池加入事件
pool.close()
#阻塞等待进程池处理事件结束后回收进程池
pool.join()
map()函数:将第二个参数的迭代对象的数据逐个带入第一个函数作为参数,兼顾了apply_async功能,将函数放入进程池。
from multiprocessing import Pool
import time
def fun(fn):
time.sleep(1)
return fn*fn
test=[1,2,3,4,5,6]
print("顺序执行:")
s=time.time()
for i in test:
fun(i)
e=time.time()
print('执行事件',e-s)
print('进程池执行')
pool=Pool(processes=4)
r=pool.map(fun,test)