位置: 编程技术 - 正文

简单谈谈python中的Queue与多进程(简述python语言)

编辑:rootadmin

推荐整理分享简单谈谈python中的Queue与多进程(简述python语言),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python简要介绍,谈下python的gil,python简要介绍,简述python语言,python简要介绍,简述python语言,谈下python的gil,简述python语言,内容如对您有帮助,希望把文章链接给更多的朋友!

最近接触一个项目,要在多个虚拟机中运行任务,参考别人之前项目的代码,采用了多进程来处理,于是上网查了查python中的多进程

一、先说说Queue(队列对象)

Queue是python中的标准库,可以直接import 引用,之前学习的时候有听过著名的“先吃先拉”与“后吃先吐”,其实就是这里说的队列,队列的构造的时候可以定义它的容量,别吃撑了,吃多了,就会报错,构造的时候不写或者写个小于1的数则表示无限多

import Queue

q = Queue.Queue()

向队列中放值(put)

q.put(‘yang')

q.put(4)

q.put([‘yan','xing'])

在队列中取值get()

默认的队列是先进先出的

>>> q.get()‘yang'>>> q.get()4>>> q.get()[‘yan', ‘xing']

当一个队列为空的时候如果再用get取则会堵塞,所以取队列的时候一般是用到

get_nowait()方法,这种方法在向一个空队列取值的时候会抛一个Empty异常

所以更常用的方法是先判断一个队列是否为空,如果不为空则取值

队列中常用的方法

Queue.qsize() 返回队列的大小Queue.empty() 如果队列为空,返回True,反之FalseQueue.full() 如果队列满了,返回True,反之FalseQueue.get([block[, timeout]]) 获取队列,timeout等待时间Queue.get_nowait() 相当Queue.get(False)非阻塞 Queue.put(item) 写入队列,timeout等待时间Queue.put_nowait(item) 相当Queue.put(item, False)

二、multiprocessing中使用子进程概念

from multiprocessing import Process

可以通过Process来构造一个子进程

p = Process(target=fun,args=(args))

简单谈谈python中的Queue与多进程(简述python语言)

再通过p.start()来启动子进程

再通过p.join()方法来使得子进程运行结束后再执行父进程

三、在multiprocessing中使用pool

如果需要多个子进程时可以考虑使用进程池(pool)来管理

from multiprocessing import Pool

pool创建子进程的方法与Process不同,是通过

p.apply_async(func,args=(args))实现,一个池子里能同时运行的任务是取决你电脑的cpu数量,如我的电脑现在是有4个cpu,那会子进程task0,task1,task2,task3可以同时启动,task4则在之前的一个某个进程结束后才开始

上面的程序运行后的结果其实是按照上图中1,2,3分开进行的,先打印1,3秒后打印2,再3秒后打印3

代码中的p.close()是关掉进程池子,是不再向里面添加进程了,对Pool对象调用join()方法会等待所有子进程执行完毕,调用join()之前必须先调用close(),调用close()之后就不能继续添加新的Process了。

当时也可以是实例pool的时候给它定义一个进程的多少

如果上面的代码中p=Pool(5)那么所有的子进程就可以同时进行

三、多个子进程间的通信

多个子进程间的通信就要采用第一步中说到的Queue,比如有以下的需求,一个子进程向队列中写数据,另外一个进程从队列中取数据,

四、关于上面代码的几个有趣的问题

如果main函数写成上面的样本,本来我想要的是将会得到一个队列,将其作为参数传入进程池子里的每个子进程,但是却得到

RuntimeError: Queue objects should only be shared between processes through inheritance

的错误,查了下,大意是队列对象不能在父进程与子进程间通信,这个如果想要使用进程池中使用队列则要使用multiprocess的Manager类

这样这个队列对象就可以在父进程与子进程间通信,不用池则不需要Manager,以后再扩展multiprocess中的Manager类吧

关于锁的应用,在不同程序间如果有同时对同一个队列操作的时候,为了避免错误,可以在某个函数操作队列的时候给它加把锁,这样在同一个时间内则只能有一个子进程对队列进行操作,锁也要在manager对象中的锁

Python设计模式之抽象工厂模式 python面向对象编程入门,我们需要不断学习进步"""抽象工厂模式的实现"""importrandomclassPetShop:"""宠物商店"""def__init__(self,animal_factory=None):"""宠物工厂是我

Python爬取京东的商品分类与链接 前言本文主要的知识点是使用Python的BeautifulSoup进行多层的遍历。如图所示。只是一个简单的哈,不是爬取里面的隐藏的东西。示例代码frombs4importBeautiful

python实现实时监控文件的方法 在业务稳定性要求比较高的情况下,运维为能及时发现问题,有时需要对应用程序的日志进行实时分析,当符合某个条件时就立刻报警,而不是被动等

标签: 简述python语言

本文链接地址:https://www.jiuchutong.com/biancheng/386194.html 转载请保留说明!

上一篇:利用Python自动监控网站并发送邮件告警的方法(python自动化监控)

下一篇:Python设计模式之抽象工厂模式(python 设计)

  • SQL Server2008 R2 数据库镜像实施手册(双机)SQL Server2014同样适用(sqlserver2008r2数据库导出教程)

    上图中将“恢复模式”选成“完整模式”。

    2、备份数据库,如下图:

    备份时将“备份类型”选成“完整”。

    3、备份事务日志,如下图:

    将“备份类型”选成“事务日志”且备份目录与备份数据库的目录一致。

    将备份文件在备机上使用主机的全备文件进行还原,在还原数据的时候需要使用选上“with non recover”。如图所示:

    如果执行成功数据库将会变成这个样子:

    3、 建立镜像

    说明:shishan为数据库名,需要根据实际进行修改。..1.为备机IP地址,需根据实际进行修改。

    执行成功后:

    到此,SQL镜像热备配置完成。

    四、常见命令

    备份主数据库出现:Backup a database on a HDD with a different sector size,可以执行以下语句备份:BACKUP DATABASE MyDB TO DISK = N'D:MyDB.bak' WITH INIT , NOUNLOAD , NAME = N'MyDB backup" class="img-responsive" alt="SQL Server2008 R2 数据库镜像实施手册(双机)SQL Server2014同样适用(sqlserver2008r2数据库导出教程)">

    SQL Server2008 R2 数据库镜像实施手册(双机)SQL Server2014同样适用(sqlserver2008r2数据库导出教程)

  • JQuery 动态生成Table表格实例代码(jquery动态设置css)

    JQuery 动态生成Table表格实例代码(jquery动态设置css)

  • jQuery滚动加载图片实现原理(jquery滚动条滚动到指定位置)

    jQuery滚动加载图片实现原理(jquery滚动条滚动到指定位置)

  • 个人购买二手房贷款能贷多少
  • 房东口头答应减免房租又反悔了
  • 主营业务怎么计算
  • 公司清理固定资产汽车怎么开票
  • 出口结汇必须要开票吗
  • 公司名称变更在哪个网站
  • 金蝶美金账户怎么开
  • 粗纤维测定仪使用方法
  • 市场运营部门工作职责
  • 财务报表中利润率怎么算
  • 增值税税金不足1元未缴纳账务处理
  • 医院会计制度准则
  • 明细分类账采用的格式有
  • 投资款转为借款需要哪些证据
  • 哪些费用可以计入待摊费用
  • 企业为什么用银行承兑汇票
  • 餐饮管理公司设哪些科目
  • 用现金支付销售产品的运费
  • 企业怎么进行税务申报
  • 合伙企业个人所得税经营所得怎么申报
  • 一般纳税人注销库存需要补交税吗
  • 托收承付结算方式
  • 企业稀释股份
  • 公司理财取得的成果
  • 季度所得税可以不预缴吗
  • 个人免征增值税起征点
  • 科研费收入如何入账?
  • mac 装 windows
  • 红字发票记账如何记账
  • 如何修改电脑默认打印机
  • 利润分配怎么核算
  • 投入法和产出法的确定属于会计估计变更吗
  • 以前年度亏损在哪个报表体现
  • 推广费开票属于什么费用
  • window10为什么没有本地用户和组
  • 生产企业自营出口应税消费品
  • 利润分配弥补亏损会计分录
  • XGboost算法预测股价模型
  • laravel 实例
  • 企业之间的借款属于民间借贷吗
  • sql server数据库怎么使用
  • 财务报表是指的什么内容
  • 加盟费明细
  • 酒店客房收入会计分录
  • 以前年度损益调整是什么意思
  • 丢失增值税专用发票的征管政策
  • 受托代销商品款是什么意思
  • 法院去单位直接扣划单位薪酬
  • 大金额维修费用怎么入账
  • 收到政府的奖励企业需要纳税吗?
  • 合伙企业对外投资收益怎么纳税
  • 按工人工资比例结转制造费用会计科目
  • 未认证的发票不入账有什么影响
  • 待处理财产损溢借贷反向
  • 报关金额多报了900美金怎么办
  • 管理费用的明细科目如何设置
  • linux的日志文件
  • win8如何使用
  • xp系统鼠标设置在哪
  • 免激活合法使用的软件
  • 苹果电脑如何制作
  • centos查看文件目录
  • Centos 5.5 php5.1.2升级到php5.2.6的方法
  • win7旗舰版系统怎么样
  • ubuntu系统怎么修改root密码
  • icg是什么文件
  • 放一个命令
  • linux yw命令
  • win7显示桌面的组合键
  • 怎么改jdk路径
  • css放大字体
  • nodejs使用视频教程
  • 文件夹权限命令
  • 轻松搞定是什么短语
  • jquery的方法
  • 麻将 空白
  • 车辆购置税查询怎么查
  • 出口退税的企业货币要回国内吗
  • 上海长宁区多大面积
  • 开票系统ukey抄报税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设