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

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

Python Process創建進程的2種方法詳解

瀏覽:6日期:2022-06-29 10:57:22

前面介紹了使用 os.fork() 函數實現多進程編程,該方法最明顯的缺陷就是不適用于 Windows 系統。本節將介紹一種支持 Python 在 Windows 平臺上創建新進程的方法。

Python multiprocessing 模塊提供了 Process 類,該類可用來在 Windows 平臺上創建新進程。和使用 Thread 類創建多線程方法類似,使用 Process 類創建多進程也有以下 2 種方式:

直接創建 Process 類的實例對象,由此就可以創建一個新的進程;

通過繼承 Process 類的子類,創建實例對象,也可以創建新的進程。注意,繼承 Process 類的子類需重寫父類的 run() 方法。

不僅如此,Process 類中也提供了一些常用的屬性和方法,如表 1 所示。

屬性名或方法名 功能 run() 第 2 種創建進程的方式需要用到,繼承類中需要對方法進行重寫,該方法中包含的是新進程要執行的代碼。 start() 和啟動子線程一樣,新創建的進程也需要手動啟動,該方法的功能就是啟動新創建的線程。 join([timeout]) 和 thread 類 join() 方法的用法類似,其功能是在多進程執行過程,其他進程必須等到調用 join() 方法的進程執行完畢(或者執行規定的 timeout 時間)后,才能繼續執行; is_alive() 判斷當前進程是否還活著。 terminate() 中斷該進程。 name屬性 可以為該進程重命名,也可以獲得該進程的名稱。 daemon 和守護線程類似,通過設置該屬性為 True,可將新建進程設置為“守護進程”。 pid 返回進程的 ID 號。大多數操作系統都會為每個進程配備唯一的 ID 號。

表 1 Python Process類常用屬性和方法

接下來將一一對創建進程的 2 種方法做詳細的講解。

通過Process類創建進程

和使用 thread 類創建子線程的方式非常類似,使用 Process 類創建實例化對象,其本質是調用該類的構造方法創建新進程。Process 類的構造方法格式如下:

def __init__(self,group=None,target=None,name=None,args=(),kwargs={})

其中,各個參數的含義為:

group:該參數未進行實現,不需要傳參; target:為新建進程指定執行任務,也就是指定一個函數; name:為新建進程設置名稱; args:為 target 參數指定的參數傳遞非關鍵字參數; kwargs:為 target 參數指定的參數傳遞關鍵字參數。

下面程序演示了如何用 Process 類創建新進程。

from multiprocessing import Processimport osprint('當前進程ID:',os.getpid())# 定義一個函數,準備作為新進程的 target 參數def action(name,*add): print(name) for arc in add: print('%s --當前進程%d' % (arc,os.getpid()))if __name__==’__main__’: #定義為進程方法傳入的參數 my_tuple = ('http://jb51.net/python/', 'http://jb51.net/shell/', 'http://jb51.net/java/') #創建子進程,執行 action() 函數 my_process = Process(target = action, args = ('my_process進程',*my_tuple)) #啟動子進程 my_process.start() #主進程執行該函數 action('主進程',*my_tuple)

程序執行結果為:當前進程ID: 12980主進程http://jb51.net/python/ --當前進程12980http://jb51.net/shell/ --當前進程12980http://jb51.net/java/ --當前進程12980當前進程ID: 12860my_process進程http://jb51.net/python/ --當前進程12860http://jb51.net/shell/ --當前進程12860http://jb51.net/java/ --當前進程12860

需要說明的是,通過 multiprocessing.Process 來創建并啟動進程時,程序必須先判斷 if __name__==’__main__’:,否則運行該程序會引發異常。

此程序中有 2 個進程,分別為主進程和我們創建的新進程,主進程會執行整個程序,而子進程不會執行 if __name__ == ’__main__’ 中包含的程序,而是先執行此判斷語句之外的所有可執行程序,然后再執行我們分配讓它的任務(也就是通過 target 參數指定的函數)。

通過Process繼承類創建進程

和使用 thread 子類創建線程的方式類似,除了直接使用 Process 類創建進程,還可以通過創建 Process 的子類來創建進程。

需要注意的是,在創建 Process 的子類時,需在子類內容重寫 run() 方法。實際上,該方法所起到的作用,就如同第一種創建方式中 target 參數執行的函數。

另外,通過 Process 子類創建進程,和使用 Process 類一樣,先創建該類的實例對象,然后調用 start() 方法啟動該進程。下面程序演示如何通過 Process 子類創建一個進程。

from multiprocessing import Processimport osprint('當前進程ID:',os.getpid())# 定義一個函數,供主進程調用def action(name,*add): print(name) for arc in add: print('%s --當前進程%d' % (arc,os.getpid()))#自定義一個進程類class My_Process(Process): def __init__(self,name,*add): super().__init__() self.name = name self.add = add def run(self): print(self.name) for arc in self.add: print('%s --當前進程%d' % (arc,os.getpid()))if __name__==’__main__’: #定義為進程方法傳入的參數 my_tuple = ('http://jb51.net/python/', 'http://jb51.net/shell/', 'http://jb51.net/java/') my_process = My_Process('my_process進程',*my_tuple) #啟動子進程 my_process.start() #主進程執行該函數 action('主進程',*my_tuple)

程序執行結果為:當前進程ID: 22240主進程http://jb51.net/python/ --當前進程22240http://jb51.net/shell/ --當前進程22240http://jb51.net/java/ --當前進程22240當前進程ID: 18848my_process進程http://jb51.net/python/ --當前進程18848http://jb51.net/shell/ --當前進程18848http://jb51.net/java/ --當前進程18848

顯然,該程序的運行結果與上一個程序的運行結果大致相同,它們只是創建進程的方式略有不同而已。推薦讀者使用第一種方式來創建進程,因為這種方式不僅編程簡單,而且進程直接包裝 target 函數,具有更清晰的邏輯結構。

到此這篇關于Python Process創建進程的2種方法詳解的文章就介紹到這了,更多相關Python Process創建進程內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 中药超微粉碎机(中药细胞级微粉碎)-百科 | 热处理炉-退火炉-回火炉设备厂家-丹阳市电炉厂有限公司 | 安全阀_弹簧式安全阀_美标安全阀_工业冷冻安全阀厂家-中国·阿司米阀门有限公司 | 超声波乳化机-超声波分散机|仪-超声波萃取仪-超声波均质机-精浩机械|首页 | 【北京写字楼出租_写字楼租赁_办公室出租网/出售】-远行地产官网 | 立式矫直机_卧式矫直机-无锡金矫机械制造有限公司 | 马尔表面粗糙度仪-MAHR-T500Hommel-Mitutoyo粗糙度仪-笃挚仪器 | NM-02立式吸污机_ZHCS-02软轴刷_二合一吸刷软轴刷-厦门地坤科技有限公司 | 浙江栓钉_焊钉_剪力钉厂家批发_杭州八建五金制造有限公司 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 美国PARKER齿轮泵,美国PARKER柱塞泵,美国PARKER叶片泵,美国PARKER电磁阀,美国PARKER比例阀-上海维特锐实业发展有限公司二部 | 大巴租车平台承接包车,通勤班车,巴士租赁业务 - 鸿鸣巴士 | 样品瓶(色谱样品瓶)百科-浙江哈迈科技有限公司 | YAGEO国巨电容|贴片电阻|电容价格|三星代理商-深圳市巨优电子有限公司 | 塑木弯曲试验机_铜带拉伸强度试验机_拉压力测试台-倾技百科 | 酒店品牌设计-酒店vi设计-酒店标识设计【国际级】VI策划公司 | 亮化工程,亮化设计,城市亮化工程,亮化资质合作,长沙亮化照明,杰奥思【官网】 | 智能案卷柜_卷宗柜_钥匙柜_文件流转柜_装备柜_浙江福源智能科技有限公司 | 氧化铝球_高铝球_氧化铝研磨球-淄博誉洁陶瓷新材料有限公司 | 塑钢件_塑钢门窗配件_塑钢配件厂家-文安县启泰金属制品有限公司 深圳南财多媒体有限公司介绍 | 超高频感应加热设备_高频感应电源厂家_CCD视觉检测设备_振动盘视觉检测设备_深圳雨滴科技-深圳市雨滴科技有限公司 | 专业生物有机肥造粒机,粉状有机肥生产线,槽式翻堆机厂家-郑州华之强重工科技有限公司 | 仪器仪表网 - 永久免费的b2b电子商务平台 | 耐热钢-耐磨钢-山东聚金合金钢铸造有限公司 | 工程管道/塑料管材/pvc排水管/ppr给水管/pe双壁波纹管等品牌管材批发厂家-河南洁尔康建材 | 菏泽商标注册_菏泽版权登记_商标申请代理_菏泽商标注册去哪里 | POS机官网 - 拉卡拉POS机免费办理|官网在线申请入口 | 浙江华锤电器有限公司_地磅称重设备_防作弊地磅_浙江地磅售后维修_无人值守扫码过磅系统_浙江源头地磅厂家_浙江工厂直营地磅 | 压滤机-洗沙泥浆处理-压泥机-山东创新华一环境工程有限公司 | 全自动端子机|刺破式端子压接机|全自动双头沾锡机|全自动插胶壳端子机-东莞市傅氏兄弟机械设备有限公司 | 萃取箱-萃取槽-PVC萃取箱厂家-混合澄清槽- 杭州南方化工设备 | 北京翻译公司_同传翻译_字幕翻译_合同翻译_英语陪同翻译_影视翻译_翻译盖章-译铭信息 | 烘箱-工业烘箱-工业电炉-实验室干燥箱 - 苏州华洁烘箱制造有限公司 | 蜂蜜瓶-玻璃瓶-玻璃瓶厂-玻璃瓶生产厂家-徐州贵邦玻璃制品有限公司 | 100_150_200_250_300_350_400公斤压力空气压缩机-舰艇航天配套厂家 | 购买舔盐、舔砖、矿物质盐压块机,鱼饵、鱼饲料压块机--请到杜甫机械 | 医学模型生产厂家-显微手术模拟训练器-仿真手术模拟训练系统-北京医教科技 | 防爆大气采样器-防爆粉尘采样器-金属粉尘及其化合物采样器-首页|盐城银河科技有限公司 | 上海深蓝_缠绕机_缠膜机-上海深蓝机械装备有限公司 | SDG吸附剂,SDG酸气吸附剂,干式酸性气体吸收剂生产厂家,超过20年生产使用经验。 - 富莱尔环保设备公司(原名天津市武清县环保设备厂) | 石栏杆_青石栏杆_汉白玉栏杆_花岗岩栏杆 - 【石雕之乡】点石石雕石材厂 |