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

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

Python通過隊列來實現(xiàn)進程間通信的示例

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

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

我們來看一個例子:

from multiprocessing import Processimport osimport timenums = [11, 22]def work1(): '''子進程要執(zhí)行的代碼''' 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(): '''子進程要執(zhí)行的代碼''' 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 循環(huán)進行處理,進程 p2 將 nums 打印出來,發(fā)現(xiàn) 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)之間有時需要通信,操作系統(tǒng)提供了很多機制來實現(xiàn)進程間的通信。

可以使用 multiprocessing 模塊的 Queue 實現(xiàn)多進程之間的數(shù)據(jù)傳遞。

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('消息隊列已滿,現(xiàn)有消息數(shù)量:%s' % q.qsize())# 第二個Try會立刻拋出異常try: q.put_nowait('消息4')except: print('消息列隊已滿,現(xiàn)有消息數(shù)量:%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通過隊列來實現(xiàn)進程間通信的示例

隊列 Queue 的使用說明

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

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

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

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

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

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

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

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

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

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

Queue實例

我們以 Queue 為例,在父進程中創(chuàng)建兩個子進程,一個往 Queue 里寫數(shù)據(jù),一個從 Queue 里讀數(shù)據(jù)。

from multiprocessing import Process, Queueimport osimport timeimport randomdef write(q): # 寫數(shù)據(jù)進程執(zhí)行的代碼: for value in [’A’, ’B’, ’C’]: print(’Put %s to queue...’ % value) q.put(value) time.sleep(random.random())def read(q): # 讀數(shù)據(jù)進程執(zhí)行的代碼: while True: if not q.empty(): value = q.get(True) print(’Get %s from queue.’ % value) time.sleep(random.random()) else: breakif __name__ == ’__main__’: # 父進程創(chuàng)建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(’所有數(shù)據(jù)都寫入并且讀完’)

運行結果:

Python通過隊列來實現(xiàn)進程間通信的示例

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

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 哈尔滨京科脑康神经内科医院-哈尔滨治疗头痛医院-哈尔滨治疗癫痫康复医院 | 舞台木地板厂家_体育运动木地板_室内篮球馆木地板_实木运动地板厂家_欧氏篮球地板推荐 | POM塑料_PBT材料「进口」聚甲醛POM杜邦原料、加纤PBT塑料报价格找利隆塑料 | 彭世修脚_修脚加盟_彭世修脚加盟_彭世足疗加盟_足疗加盟连锁_彭世修脚技术培训_彭世足疗 | 奶茶加盟,奶茶加盟店连锁品牌-甜啦啦官网| 蔬菜配送公司|蔬菜配送中心|食材配送|饭堂配送|食堂配送-首宏公司 | 冷却塔减速机器_冷却塔皮带箱维修厂家_凉水塔风机电机更换-广东康明冷却塔厂家 | 郑州宣传片拍摄-TVC广告片拍摄-微电影短视频制作-河南优柿文化传媒有限公司 | 科威信洗净科技,碳氢清洗机,超声波清洗机,真空碳氢清洗机 | 耐火浇注料价格-高强高铝-刚玉碳化硅耐磨浇注料厂家【直销】 | 元拓建材集团官方网站| 丁基胶边来料加工,医用活塞边角料加工,异戊二烯橡胶边来料加工-河北盛唐橡胶制品有限公司 | 珠海网站建设_响应网站建设_珠海建站公司_珠海网站设计与制作_珠海网讯互联 | 无锡不干胶标签,卷筒标签,无锡瑞彩包装材料有限公司 | 宝宝药浴-产后药浴-药浴加盟-艾裕-专注母婴调养泡浴 | 深圳网站建设-高端企业网站开发-定制网页设计制作公司 | 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 防爆电机_防爆电机型号_河南省南洋防爆电机有限公司 | 恒温恒湿箱(药品/保健品/食品/半导体/细菌)-兰贝石(北京)科技有限公司 | 铁素体测量仪/检测仪/铁素体含量测试仪-苏州圣光仪器有限公司 | 耐火浇注料价格-高强高铝-刚玉碳化硅耐磨浇注料厂家【直销】 | 创客匠人-让IP变现不走弯路 | 百度网站优化,关键词排名,SEO优化-搜索引擎营销推广 | 房在线-免费房产管理系统软件-二手房中介房屋房源管理系统软件 | 传递窗_超净|洁净工作台_高效过滤器-传递窗厂家广州梓净公司 | 河南中整光饰机械有限公司-抛光机,去毛刺抛光机,精密镜面抛光机,全自动抛光机械设备 | 液氨泵,液化气泵-淄博「亚泰」燃气设备制造有限公司 | 高速龙门架厂家_监控杆_多功能灯杆_信号灯杆_锂电池太阳能路灯-鑫世源照明 | 卫生型双针压力表-高温防腐差压表-安徽康泰电气有限公司 | 丝杆升降机-不锈钢丝杆升降机-非标定制丝杆升降机厂家-山东鑫光减速机有限公司 | 天津散热器_天津暖气片_天津安尼威尔散热器制造有限公司 | 【365公司转让网】公司求购|转让|资质买卖_股权转让交易平台 | 定做大型恒温循环水浴槽-工业用不锈钢恒温水箱-大容量低温恒温水槽-常州精达仪器 | 药品冷藏箱厂家_低温冰箱_洁净工作台-济南欧莱博电子商务有限公司官网 | 欧洲MV日韩MV国产_人妻无码一区二区三区免费_少妇被 到高潮喷出白浆av_精品少妇自慰到喷水AV网站 | 精雕机-火花机-精雕机 cnc-高速精雕机-电火花机-广东鼎拓机械科技有限公司 | 定制/定做冲锋衣厂家/公司-订做/订制冲锋衣价格/费用-北京圣达信 | 石英陶瓷,石英坩埚,二氧化硅陶瓷-淄博百特高新材料有限公司 | 蓄电池在线监测系统|SF6在线监控泄露报警系统-武汉中电通电力设备有限公司 | POS机官网 - 拉卡拉POS机免费办理|官网在线申请入口 | 一礼通 (www.yilitong.com)-企业礼品解决方案一站式服务平台 |