python笔记--进程池

创建自己的进程类

from multiprocessing import Process
from time import sleep,ctime


class Clockprocess(Process):
    def __init__(self,value):
        self.value = value
        Process.__init__(self)

    def run(self):
        for _ in range(5):
            sleep(self.value)
            print(ctime())

p = Clockprocess(1)
p.start()
p.join()

print('Over!')


--------------
多进程
优点: 并行多个任务,提高运行效率,空间独立,数据安全,创建方便
缺点: 进程创建晓辉的过程中消耗较多的计算机资源


进程池:
在需要频繁地创建销毁进程资源的情况下,使用进程池技术;

1, 创建进程池,在池内放入适量的进程
2, 将事件加入进程池等待队列
3, 使用进程池中的进程不断处理事件
4, 所有事件处理后,回收关闭进程池


from multiprocessing import Pool

Pool(processes)
功能: 创建进程池
参数: processes: 进程池中进程数量
返回: 得到进程池对象


pool.apply_async()
功能: 异步方式将事件放入进程池执行
参数: func 要执行的事件函数
        args: 同process中的args,给函数传参
        kwds: 以字典方式给函数传参
        
        
close()    关闭进程池,使其无法加入新的事件

pool.join()    阻塞等待进程池退出,(当所有时间处理完毕后)

每个进程可以获取其返回值,通过return获取返回值对象r
r.get() 可以获取返回值对象的返回值

apply()函数 用法和apply_async()功能相似,只是需要顺序执行,一个事件结束再执行另一个事件

pool.map(func, iter)        功能同高阶函数map() ,逐个将iter中的参数迭代使用func函数执行,但是会以进程池的数量同步执行(兼容进程池功能)

 


from multiprocessing import Pool
from time import sleep,ctime
import os


def worker(msg):
    print(msg)
    sleep(3)
    return msg + 'Over!'

#创建进程池对象
p = Pool(processes = 4)

#将事件放入,并执行
result = []
for I in range(10):
    msg = '打第{}场游戏.'.format(I)
    #加入事件后,进程会立即运行
    r = p.apply_async(worker, (msg,))
    result.append(r)

sleep(3)
print('------------------')

#关闭进程池
p.close()
sleep(3)
print('-**************')

#回收进程池
p.join()
print('+++++++++++++')


for I in result:
    print(I.get())

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值