进程池技术

  1. 创建进程池,在池内放入合适数量的进程
  2. 将时间加入进程池的等待队列
  3. 使用进程池内的进程不断的执行等待事件
  4. 所有事件处理结束后关闭回收进程池

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值