三十六、进程2(重点):进程池Pool、进程间通信(队列、栈)、多进程拷贝文件(综合运用)

一、进程池Pool

1、apply_async (func , args , kwds)   非阻塞方式

     apply(func,args,)  阻塞方式

使用非阻塞方式调用函数(并行执行,进程间同步执行

堵塞方式必须等待上一个进程退出才能执行下一个进程(相当于单进程执行

args为传递给func的参数列表,kwds为传递给func的关键字参数列表;

2、close():关闭Pool,使其不再接受新的任务

3、terminate():不管任务是否完成,立即终止

4、join():主进程阻塞,等待子进程的退出,必须在close或terminate之后使用

二、案例:创建3个进程池

1、pool=Pool()     —  ()内没有进程数,默认进程池大小等于CPU核心数(本机核心数为4),产生结果会4个进程一起执行(4个一组)

2、pool=Pool(3)    —   进程池有3个进程一起执行

3、非阻塞不会阻止主进程,但阻塞方式会阻止主进程执行,必须等待子进程执行完毕才行

4、进程池里的进程数不是越大越好,需要根据操作系统来定的,需要合理分配。

三、进程间通信

1、队列:先进先出,后进后出

2、栈:先进后出,后进先出

3、队列的相关操作:

① 导入Queue              from  multiprocessing   import  Queue

② 创建队列: q=Queue()  —  括号内不写,可放任何数量

                        q=Queue(3)  —   创建队列,指定的是3,说明这个队列里面最多只能放3个  

③ q.qsize()  — 查看队列内容个数

④ q.put(" haha")    —  往队列里放入内容

⑤ q.get()  —  取出元素,遵循先进先出,后进后出原则

⑥ q.empty()  —判断队列是否为空,True表示为空

⑦ q.full()   — 判断队列是否为满,为False表示不满

                  

⑧ q.get_nowait()    — 取数据,有数据的话,就可以取出数据,没有取出数据时,直接抛出异常(非阻塞形式的)

⑨ q.put_nowait(   [ ] /数字/字符串/列表   )   —  可存储任何数据类型,超过存放个数时,抛出异常

⑩上述两个抛出异常,可以用try方法,捕获异常

四、进程池中的Queue,需要导包Manager,pool(不导Queue了)

q=Manager() . Queue()       — 创建队列

pool=Pool()     —  ()内没有进程数,默认进程池大小等于CPU核心数(本机核心数为4),产生结果会4个进程一起执行(4个一组)

5、实例:

 

五、多进程拷贝文件(综合运用)

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值