电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Python通過隊列來實現進程間通信的示例

瀏覽:18日期:2022-07-08 13:39:48

Python程序中,在進程和進程之間是不共享全局變量的數據的。

我們來看一個例子:

from multiprocessing import Processimport osimport timenums = [11, 22]def work1(): '''子進程要執行的代碼''' print('in process1 pid=%d ,nums=%s' % (os.getpid(), nums)) for i in range(3): nums.append(i) time.sleep(1) print('in process1 pid=%d ,nums=%s' % (os.getpid(), nums))def work2(): '''子進程要執行的代碼''' print('in process2 pid=%d ,nums=%s' % (os.getpid(), nums))if __name__ == ’__main__’: p1 = Process(target=work1) p1.start() p1.join() p2 = Process(target=work2) p2.start()

進程 p1 里對全局變量 nums 循環進行處理,進程 p2 將 nums 打印出來,發現 nums 的值沒有變化。

運行結果:

in process1 pid=5788 ,nums=[11, 22]in process1 pid=5788 ,nums=[11, 22, 0]in process1 pid=5788 ,nums=[11, 22, 0, 1]in process1 pid=5788 ,nums=[11, 22, 0, 1, 2]in process2 pid=11832 ,nums=[11, 22]

通過隊列完成進程間通信

但是進程(Process)之間有時需要通信,操作系統提供了很多機制來實現進程間的通信。

可以使用 multiprocessing 模塊的 Queue 實現多進程之間的數據傳遞。

Queue 本身是一個消息隊列程序,首先用一個小實例來演示一下 Queue 的工作原理:

from multiprocessing import Queue# 初始化一個Queue對象,最多可接收三條put消息q = Queue(3) q.put('消息1')q.put('消息2')print(q.full()) # Falseq.put('消息3')print(q.full()) # True# 因為消息隊列已滿下面的try都會拋出異常# 第一個try會等待2秒后再拋出異常try: q.put('消息4', True, 2)except: print('消息隊列已滿,現有消息數量:%s' % q.qsize())# 第二個Try會立刻拋出異常try: q.put_nowait('消息4')except: print('消息列隊已滿,現有消息數量:%s' % q.qsize())# 推薦的方式,先判斷消息列隊是否已滿,再寫入if not q.full(): q.put_nowait('消息4')# 讀取消息時,先判斷消息列隊是否為空,再讀取if not q.empty(): for i in range(q.qsize()): print(q.get_nowait())

運行結果:

Python通過隊列來實現進程間通信的示例

隊列 Queue 的使用說明

初始化 Queue()對象時(例如:q=Queue()),若括號中沒有指定最大可接收的消息數量,或數量為負值,那么就代表可接受的消息數量沒有上限(直到內存的盡頭)。

Queue.qsize():返回當前隊列包含的消息數量。

Queue.empty():如果隊列為空,返回True,反之False。

Queue.full():如果隊列滿了,返回True,反之False。

Queue.get([block[, timeout]]):獲取隊列中的一條消息,然后將其從列隊中移除,block 默認值為 True。

如果 block 使用默認值,且沒有設置 timeout(單位秒),消息隊列如果為空,此時程序將被阻塞,停在讀取狀態,直到從消息隊列讀到消息為止;如果設置了 timeout,則會等待 timeout 秒,若還沒讀取到任何消息,則拋出 'Queue.Empty' 異常。 如果 block 值為 False,消息列隊如果為空,則會立刻拋出 'Queue.Empty' 異常。

Queue.get_nowait():相當 Queue.get(False)。

Queue.put(item,[block[, timeout]]):將 item 消息寫入隊列,block 默認值為 True。

如果 block 使用默認值,且沒有設置 timeout(單位秒),消息隊列如果已經沒有空間可寫入,此時程序將被阻塞,停在寫入狀態,直到從消息隊列騰出空間為止;如果設置了timeout,則會等待 timeout 秒,若還沒空間,則拋出 'Queue.Full' 異常。 如果 block 值為 False,消息隊列如果沒有空間可寫入,則會立刻拋出 'Queue.Full' 異常。

Queue.put_nowait(item):相當Queue.put(item, False)。

Queue實例

我們以 Queue 為例,在父進程中創建兩個子進程,一個往 Queue 里寫數據,一個從 Queue 里讀數據。

from multiprocessing import Process, Queueimport osimport timeimport randomdef write(q): # 寫數據進程執行的代碼: for value in [’A’, ’B’, ’C’]: print(’Put %s to queue...’ % value) q.put(value) time.sleep(random.random())def read(q): # 讀數據進程執行的代碼: while True: if not q.empty(): value = q.get(True) print(’Get %s from queue.’ % value) time.sleep(random.random()) else: breakif __name__ == ’__main__’: # 父進程創建Queue,并傳給各個子進程: q = Queue() pw = Process(target=write, args=(q,)) pr = Process(target=read, args=(q,)) # 啟動子進程pw,寫入: pw.start() # 等待pw結束: pw.join() # 啟動子進程pr,讀取: pr.start() pr.join() print(’’) print(’所有數據都寫入并且讀完’)

運行結果:

Python通過隊列來實現進程間通信的示例

以上就是Python通過隊列來實現進程間通信的示例的詳細內容,更多關于python實現進程間通信的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 包装盒厂家_纸盒印刷_礼品盒定制-济南恒印包装有限公司 | 仿古瓦,仿古金属瓦,铝瓦,铜瓦,铝合金瓦-西安东申景观艺术工程有限公司 | 钢骨架轻型板_膨石轻型板_钢骨架轻型板价格_恒道新材料 | 工业机械三维动画制作 环保设备原理三维演示动画 自动化装配产线三维动画制作公司-南京燃动数字 聚合氯化铝_喷雾聚氯化铝_聚合氯化铝铁厂家_郑州亿升化工有限公司 | 环保袋,无纺布袋,无纺布打孔袋,保温袋,环保袋定制,环保袋厂家,环雅包装-十七年环保袋定制厂家 | 过滤器_自清洗过滤器_气体过滤器_苏州华凯过滤技术有限公司 | 最新范文网_实用的精品范文美文网| 高温高压釜(氢化反应釜)百科| 苏商学院官网 - 江苏地区唯一一家企业家自办的前瞻型、实操型商学院 | 车牌识别道闸_停车场收费系统_人脸识别考勤机_速通门闸机_充电桩厂家_中全清茂官网 | 北京发电车出租-发电机租赁公司-柴油发电机厂家 - 北京明旺盛安机电设备有限公司 | 物联网卡_物联网卡购买平台_移动物联网卡办理_移动联通电信流量卡通信模组采购平台? | 超高频感应加热设备_高频感应电源厂家_CCD视觉检测设备_振动盘视觉检测设备_深圳雨滴科技-深圳市雨滴科技有限公司 | 航空连接器,航空插头,航空插座,航空接插件,航插_深圳鸿万科 | 选矿设备-新型重选设备-金属矿尾矿重选-青州冠诚重工机械有限公司 | YAGEO国巨电容|贴片电阻|电容价格|三星代理商-深圳市巨优电子有限公司 | 耙式干燥机_真空耙式干燥机厂家-无锡鹏茂化工装备有限公司 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛调查出轨取证公司_青岛婚外情取证-青岛探真调查事务所 | 防爆电机生产厂家,YBK3电动机,YBX3系列防爆电机,YBX4节防爆电机--河南省南洋防爆电机有限公司 | 四川实木门_成都实木门 - 蓬溪聚成门业有限公司 | 长沙一级消防工程公司_智能化弱电_机电安装_亮化工程专业施工承包_湖南公共安全工程有限公司 | 恒压供水控制柜|无负压|一体化泵站控制柜|PLC远程调试|MCGS触摸屏|自动控制方案-联致自控设备 | 特种电缆厂家-硅橡胶耐高温电缆-耐低温补偿导线-安徽万邦特种电缆有限公司 | 电脑知识|软件|系统|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网 | 沈阳激光机-沈阳喷码机-沈阳光纤激光打标机-沈阳co2激光打标机 | 附着力促进剂-尼龙处理剂-PP处理剂-金属附着力处理剂-东莞市炅盛塑胶科技有限公司 | 温州中研白癜风专科_温州治疗白癜风_温州治疗白癜风医院哪家好_温州哪里治疗白癜风 | 可程式恒温恒湿试验箱|恒温恒湿箱|恒温恒湿试验箱|恒温恒湿老化试验箱|高低温试验箱价格报价-广东德瑞检测设备有限公司 | 兰州UPS电源,兰州山特UPS-兰州万胜商贸 | 冷却塔改造厂家_不锈钢冷却塔_玻璃钢冷却塔改造维修-广东特菱节能空调设备有限公司 | 烟台条码打印机_烟台条码扫描器_烟台碳带_烟台数据采集终端_烟台斑马打印机-金鹏电子-金鹏电子 | 单锥双螺旋混合机_双螺旋锥形混合机-无锡新洋设备科技有限公司 | 杭州月嫂技术培训服务公司-催乳师培训中心报名费用-产后康复师培训机构-杭州优贝姆健康管理有限公司 | 油缸定制-液压油缸厂家-无锡大鸿液压气动成套有限公司 | 环球电气之家-中国专业电气电子产品行业服务网站! | 体视显微镜_荧光生物显微镜_显微镜报价-微仪光电生命科学显微镜有限公司 | 北京浩云律师事务所-法律顾问_企业法务_律师顾问_公司顾问 | 特种电缆厂家-硅橡胶耐高温电缆-耐低温补偿导线-安徽万邦特种电缆有限公司 | 模具硅橡胶,人体硅胶,移印硅胶浆厂家-宏图硅胶科技 | 许昌奥仕达自动化设备有限公司| 变位机,焊接变位机,焊接变位器,小型变位机,小型焊接变位机-济南上弘机电设备有限公司 |