python(32)-多进程-进程池

进程池:用于确定同一时间有多少个进程在CPU上运行。本实例创建10个进程,每次就启用5个,就是5个5个的打印。
进程池用法:
1. 创建 mypool = Pool(5)
2. 调用 mypool.apply_async(func=Foo, args=(i,), callback=Bar)
3. 关闭 mypool.close()
4. 阻塞等待 mypool.join() 一定要在最后这加上,否则就不执行了,我也不知道为什么。
在 windows下启动多进程,一定要加上freeze_support()  MAC linux不需要。
from multiprocessing import Process, Pool,freeze_support
import time
import os

def Foo(i):
    time.sleep(2)
    print("in process foo",os.getpid())
    return i + 100

#此回调函数用于数据库备份场景 父进程里直接写数据库
#                          不需要每个子进程都连一次数据库
def Bar(arg):
    print("-->exec done:", arg)

def mypool():
   freeze_support()                                # windows启动时必备  如果是直接调用则执行,如果是作为模块被调用,则不执行
   mypool = Pool(5)                                  #1.创建进程池 允许同时放入5个进程
   for i in range(10):
      mypool.apply_async(func=Foo, args=(i,), callback=Bar) #2.应用到进程里 callback 执行完foo 后调用Bar
    # mypool.apply(func=Foo, args=(i,))
    #mypool.apply_async(func=Foo, args=(i,))

   print('end')
   mypool.close()   #先close() 后join()
   mypool.join()    # 进程池中进程执行完毕后再关闭,如果注释,那么程序直接关闭。

#主程序的入口 手动时会执行,模块导入时不会执行
if __name__ == '__main__':
       mypool()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值