当前位置: 首页 > news >正文

python学习之进程池

3.进程池
3.1 主要的方法
p.apply_async(func[,args[,kwds]])    #非阻塞方式调用func,并行执行
func 函数名
args为传递给func的参数列表----元组形式
kwds 为传递给func的关键字参数列表
p.close()  #关闭进程池,防止进一步操作(进程池不在接收新的任务)
p.join() #阻塞进程
enumerate() #不管任务是否完成,立即终止
如果使用异步提交任务,等进程池内任务都处理完,需要用get()来收集结果
使用场景:
利用python进行系统管理的时候,同时操作多个文件目录,或者远程操作多台主机,并行操作可以
节约大量的时间
阻塞:遇到I/O就发生阻塞,程序一旦遇到阻塞操作就停在原地,并且立刻释放CPU资源
非阻塞:没有遇到I/O操作,或者通过某种手段让程序即便遇到IO操作,也不会停在原地而去执行其他操作,力求尽可能多的占有cpu资源
同步和异步指的是提交任务的两种方式
同步调用:提交完这个任务后就在原地等待,知道任务运行完毕后,拿到任务的返回值,才继续执行下一行代码
异步调用:提交完任务后,不在原地等待,直接执行下一行代码
同步:我等你(当你告诉(拿到任务的返回值)我已经执行完,那我再继续往下执行)
异步:只管提交任务执行 系统会通知任务是否执行完毕
异步:不用等待当前的进程执行完毕随时根据系统调度来进行进程的切换

import os
import time
from multiprocessing import Pooldef learn(n):print("我们在做学术交流")time.sleep(2)return n**2if __name__ == '__main__':#创建进程池p = Pool(3)list1 = []for i in range(6):# apply_async异步result = p.apply_async(learn,args=(i,))#把结果添加到列表中去list1.append(result)#关闭进程池,关闭后p不再接受新的请求p.close()#等待p中所有子进程执行完成,必须放在close之后p.join()for j in list1:# 使用get来获取apply.async的结果print(j.get())

同步:apply  同步阻塞,需要等待当前的子进程执行完毕后,再执行下一个进程(按顺序执行)

import os
import time
from multiprocessing import Pooldef learn(n):print("我们在做学术交流")time.sleep(2)return n ** 2if __name__ == '__main__':list1 = []p = Pool(3)for i in range(6):p.apply(learn,args=(i,))list1.append(i)print(list1)

Pool创建进程池 需要使用multiprocessing.Manager()中的Queue()
进程间的通信: multiprocessing.Queue()
Manager()模块专门做数据共享,支持的类型很多:如value,array,list,dict,Queue,Lock等

multiprocessing模块下的Queue()为进程提供服务
queue模块下的Queue()为线程提供服务

队列实例化 q = Manager().Queue()

from multiprocessing import Pool,Manager
import os
def rd(q):print(f"rd启动了,{os.getpid()},父进程:{os.getppid()}")for i in range(q.qsize()):  #q.size()返回队列中数据的数量print("取出数据:",q.get())def wd(q):print(f"wd启动了{os.getpid()},父进程:{os.getppid()}")for i in '123':print("wd中的:",i)q.put(i)  #把字符123中的某个数据放进队列中if __name__ == '__main__':print(f"开始了{os.getpid()}")q = Manager().Queue()p = Pool()p.apply_async(wd,args=(q,))p.apply_async(rd,args=(q,))p.close()  # 关闭进程池p.join()   # 阻塞主进程print("结束了",os.getpid())
http://www.dtcms.com/a/528896.html

相关文章:

  • CS Representation and operation of data
  • 【C++闯关笔记】map与set的使用
  • 线性代数 · 伪逆矩阵 | 定义、求法、性质及应用
  • 网站用图片一个域名绑定多个网站
  • php网站开发能挣多钱网站建设与管理 ppt
  • 05R语言基础操作
  • StarRocks 集群安装部署文档
  • 网站建设管理员工工资多少游仙移动网站建设
  • Excel数据对比工具,快速找出表格差异
  • 做自媒体你不得不知道的视频网站千瓜数据
  • R语言众数函数分析
  • 【Linux】理解其中的权限
  • 随音舞动:Visualizer实现音频律动效果
  • 重庆交通建设集团网站怎么做微信网站推广
  • 25-TensorFlow:概述Google开发的流行机器学习框架
  • 亚马逊云渠道商:AWS 本地 SSD 缓存是什么?
  • 苏州商城网站制作asp 免费网站模板
  • C. Serval 和公式
  • libevent库
  • c盘突然就满了怎么回事?怎么清理爆满的c盘?
  • 双流区规划局建设局网站网站开发分类列表
  • 10.4FormData :前端文件上传与表单数据处理的核心工具
  • 肇庆建网站在网站上显示备案信息
  • 如何批量获取蛋白质序列的所有结构域(domain)数据-1
  • 做兼职在线抠图网站本科自考科目有哪些
  • wordpress 下载模板站做的网站如何更换网站模板
  • Rust:Windows 系统 VsCode 环境搭建
  • 网站开发+接活创建一个网站的项目体现项目完成速度因素的
  • 双馈风力发电机控制系统仿真设计(论文+仿真)
  • 国内做性视频网站有哪些南京越城建设集团有限公司网站