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

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

Python多進程編程常用方法解析

瀏覽:2日期:2022-08-01 09:40:33

python中的多線程其實并不是真正的多線程,如果想要充分地使用多核CPU資源,在python中大部分情況需要使用多進程。python提供了非常好用的多進程包Multiprocessing,只需要定義一個函數,python會完成其它所有事情。借助這個包,可以輕松完成從單進程到并發執行的轉換。multiprocessing支持子進程、通信和共享數據、執行不同形式的同步,提供了Process、Queue、Pipe、LocK等組件

一、Process

語法:Process([group[,target[,name[,args[,kwargs]]]]])

參數含義:target表示調用對象;args表示調用對象的位置參數元祖;kwargs表示調用對象的字典。name為別名,groups實際上不會調用。

方法:is_alive():

 join(timeout):

 run():

 start():

 terminate():

屬性:authkey、daemon(要通過start()設置)、exitcode(進程在運行時為None、如果為-N,表示被信號N結束)、name、pid。其中daemon是父進程終止后自動終止,且自己不能產生新的進程,必須在start()之前設置。

1.創建函數,并將其作為單個進程

from multiprocessing import Processdef func(name): print('%s曾經是好人'%name)if __name__ == '__main__': p = Process(target=func,args=(’kebi’,)) p.start() #start()通知系統開啟這個進程

2.創建函數并將其作為多個進程

from multiprocessing import Processimport random,timedef hobby_motion(name): print(’%s喜歡運動’% name) time.sleep(random.randint(1,3))def hobby_game(name): print(’%s喜歡游戲’% name) time.sleep(random.randint(1,3))if __name__ == '__main__': p1 = Process(target=hobby_motion,args=(’付婷婷’,)) p2 = Process(target=hobby_game,args=(’科比’,)) p1.start() p2.start()

執行結果:

付婷婷喜歡運動科比喜歡游戲

3.將進程定義為類(開啟進程的另一種方法,并不是很常用)

from multiprocessing import Processclass MyProcess(Process): def __init__(self,name): super().__init__() self.name = name def run(self): #start()時,run自動調用,而且此處只能定義為run。 print('%s曾經是好人'%self.name)if __name__ == '__main__': p = MyProcess(’kebi’) p.start() #將Process當作父類,并且自定義一個函數。

4.daemon程序對比效果

不加daemon屬性

import timedef func(name): print('work start:%s'% time.ctime()) time.sleep(2) print('work end:%s'% time.ctime())if __name__ == '__main__': p = Process(target=func,args=(’kebi’,)) p.start() print('this is over')#執行結果this is overwork start:Thu Nov 30 16:12:00 2017work end:Thu Nov 30 16:12:02 2017

加上daemon屬性

from multiprocessing import Processimport timedef func(name): print('work start:%s'% time.ctime()) time.sleep(2) print('work end:%s'% time.ctime())if __name__ == '__main__': p = Process(target=func,args=(’kebi’,)) p.daemon = True #父進程終止后自動終止,不能產生新進程,必須在start()之前設置 p.start() print('this is over')#執行結果this is over

設置了daemon屬性又想執行完的方法:

import timedef func(name): print('work start:%s'% time.ctime()) time.sleep(2) print('work end:%s'% time.ctime())if __name__ == '__main__': p = Process(target=func,args=(’kebi’,)) p.daemon = True p.start() p.join() #執行完前面的代碼再執行后面的 print('this is over')#執行結果work start:Thu Nov 30 16:18:39 2017work end:Thu Nov 30 16:18:41 2017this is over

5.join():上面的代碼執行完畢之后,才會執行后i面的代碼。

先看一個例子:

from multiprocessing import Processimport time,os,randomdef func(name,hour): print('A lifelong friend:%s,%s'% (name,os.getpid())) time.sleep(hour) print('Good bother:%s'%name)if __name__ == '__main__': p = Process(target=func,args=(’kebi’,2)) p1 = Process(target=func,args=(’maoxian’,1)) p2 = Process(target=func,args=(’xiaoniao’,3)) p.start() p1.start() p2.start() print('this is over')

執行結果:

this is over #最后執行,最先打印,說明start()只是開啟進程,并不是說一定要執行完A lifelong friend:kebi,12048A lifelong friend:maoxian,8252A lifelong friend:xiaoniao,6068Good bother:maoxian #最先打印,第二位執行Good bother:kebi Good bother:xiaoniao

添加join()

from multiprocessing import Processimport time,os,randomdef func(name,hour): print('A lifelong friend:%s,%s'% (name,os.getpid())) time.sleep(hour) print('Good bother:%s'%name)start = time.time()if __name__ == '__main__': p = Process(target=func,args=(’kebi’,2)) p1 = Process(target=func,args=(’maoxian’,1)) p2 = Process(target=func,args=(’xiaoniao’,3)) p.start() p.join() #上面的代碼執行完畢之后,再執行后面的 p1.start() p1.join() p2.start() p2.join() print('this is over') print(time.time() - start)#執行結果A lifelong friend:kebi,14804Good bother:kebiA lifelong friend:maoxian,11120Good bother:maoxianA lifelong friend:xiaoniao,10252 #每個進程執行完了,才會執行下一個Good bother:xiaoniaothis is over6.497815370559692 #2+1+3+主程序執行時間

改變一下位置

from multiprocessing import Processimport time,os,randomdef func(name,hour): print('A lifelong friend:%s,%s'% (name,os.getpid())) time.sleep(hour) print('Good bother:%s'%name)start = time.time()if __name__ == '__main__': p = Process(target=func,args=(’kebi’,2)) p1 = Process(target=func,args=(’maoxian’,1)) p2 = Process(target=func,args=(’xiaoniao’,3)) p.start() p1.start() p2.start() p.join() #需要2秒 p1.join() #到這時已經執行完 p2.join() #已經執行了2秒,還要1秒 print('this is over') print(time.time() - start)#執行結果A lifelong friend:kebi,13520A lifelong friend:maoxian,11612A lifelong friend:xiaoniao,17064 #幾乎是同時開啟執行Good bother:maoxianGood bother:kebiGood bother:xiaoniaothis is over3.273620367050171 #以最長時間的為主

6.其它屬性和方法

from multiprocessing import Processimport timedef func(name): print('work start:%s'% time.ctime()) time.sleep(2) print('work end:%s'% time.ctime())if __name__ == '__main__': p = Process(target=func,args=(’kebi’,)) p.start() p.terminate() #將進程殺死,而且必須放在start()后面,與daemon的功能類似#執行結果this is over

from multiprocessing import Processimport timedef func(name): print('work start:%s'% time.ctime()) time.sleep(2) print('work end:%s'% time.ctime())if __name__ == '__main__': p = Process(target=func,args=(’kebi’,)) # p.daemon = True print(p.is_alive()) p.start() print(p.name) #獲取進程的名字 print(p.pid) #獲取進程的pid print(p.is_alive()) #判斷進程是否存在 print('this is over')

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 超声骨密度仪,双能X射线骨密度仪【起草单位】,骨密度检测仪厂家 - 品源医疗(江苏)有限公司 | 环保袋,无纺布袋,无纺布打孔袋,保温袋,环保袋定制,环保袋厂家,环雅包装-十七年环保袋定制厂家 | 杭州网络公司_百度SEO优化-外贸网络推广_抖音小程序开发-杭州乐软科技有限公司 | 河南包装袋厂家_河南真空袋批发价格_河南服装袋定制-恒源达包装制品 | 医学动画公司-制作3d医学动画视频-医疗医学演示动画制作-医学三维动画制作公司 | 等离子空气净化器_医用空气消毒机_空气净化消毒机_中央家用新风系统厂家_利安达官网 | SOUNDWELL 编码器|电位器|旋转编码器|可调电位器|编码开关厂家-广东升威电子制品有限公司 | 电力测功机,电涡流测功机,磁粉制动器,南通远辰曳引机测试台 | 跨境物流_美国卡派_中大件运输_尾程派送_海外仓一件代发 - 广州环至美供应链平台 | 发电机价格|发电机组价格|柴油发电机价格|柴油发电机组价格网 | 分光色差仪,测色仪,反透射灯箱,爱色丽分光光度仪,美能达色差仪维修_苏州欣美和仪器有限公司 | 北京自然绿环境科技发展有限公司专业生产【洗车机_加油站洗车机-全自动洗车机】 | 包装机传感器-搅拌站传感器-山东称重传感器厂家-济南泰钦电气 | 超声波_清洗机_超声波清洗机专业生产厂家-深圳市好顺超声设备有限公司 | 太原装修公司_山西整装家装设计_太原室内装潢软装_肖邦家居 | 河南道路标志牌_交通路标牌_交通标志牌厂家-郑州路畅交通 | 便携式表面粗糙度仪-彩屏硬度计-分体式粗糙度仪-北京凯达科仪科技有限公司 | 美国PARKER齿轮泵,美国PARKER柱塞泵,美国PARKER叶片泵,美国PARKER电磁阀,美国PARKER比例阀-上海维特锐实业发展有限公司二部 | 森旺-A级防火板_石英纤维板_不燃抗菌板装饰板_医疗板 | 紫外线老化试验箱_uv紫外线老化试验箱价格|型号|厂家-正航仪器设备 | 亿立分板机_曲线_锯片式_走刀_在线式全自动_铣刀_在线V槽分板机-杭州亿协智能装备有限公司 | 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | BOE画框屏-触摸一体机-触控查询一体机-触摸屏一体机价格-厂家直销-触发电子 | 陶瓷砂磨机,盘式砂磨机,棒销式砂磨机-无锡市少宏粉体科技有限公司 | 袋式过滤器,自清洗过滤器,保安过滤器,篮式过滤器,气体过滤器,全自动过滤器,反冲洗过滤器,管道过滤器,无锡驰业环保科技有限公司 | 排烟防火阀-消防排烟风机-正压送风口-厂家-价格-哪家好-德州鑫港旺通风设备有限公司 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | 伸缩节_伸缩器_传力接头_伸缩接头_巩义市联通管道厂 | 微学堂-电动能源汽车评测_电动车性能分享网 | 知企服务-企业综合服务(ZiKeys.com)-品优低价、种类齐全、过程管理透明、速度快捷高效、放心服务,知企专家! | 制氮设备-变压吸附制氮设备-制氧设备-杭州聚贤气体设备制造有限公司 | 消泡剂-水处理消泡剂-涂料消泡剂-切削液消泡剂价格-东莞德丰消泡剂厂家 | 实验室隔膜泵-无油防腐蚀隔膜泵-耐腐蚀隔膜真空泵-杭州景程仪器 电杆荷载挠度测试仪-电杆荷载位移-管桩测试仪-北京绿野创能机电设备有限公司 | 三氯异氰尿酸-二氯-三氯-二氯异氰尿酸钠-优氯净-强氯精-消毒片-济南中北_优氯净厂家 | 篷房[仓储-婚庆-展览-活动]生产厂家-江苏正德装配式帐篷有限公司 | 食品无尘净化车间,食品罐装净化车间,净化车间配套风淋室-青岛旭恒洁净技术有限公司 | 安平县鑫川金属丝网制品有限公司,声屏障,高速声屏障,百叶孔声屏障,大弧形声屏障,凹凸穿孔声屏障,铁路声屏障,顶部弧形声屏障,玻璃钢吸音板 | 奇酷教育-Python培训|UI培训|WEB大前端培训|Unity3D培训|HTML5培训|人工智能培训|JAVA开发的教育品牌 | 山东活动策划|济南活动公司|济南公关活动策划-济南锐嘉广告有限公司 | 香蕉筛|直线|等厚|弧形|振动筛|香蕉筛厂家-洛阳隆中重工 | 东莞画册设计_logo/vi设计_品牌包装设计 - 华略品牌设计公司 |