最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python Process創(chuàng)建進(jìn)程的2種方法詳解

 更新時間:2021年01月25日 11:14:24   投稿:zx  
這篇文章主要介紹了Python Process創(chuàng)建進(jìn)程的2種方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前面介紹了使用 os.fork() 函數(shù)實(shí)現(xiàn)多進(jìn)程編程,該方法最明顯的缺陷就是不適用于 Windows 系統(tǒng)。本節(jié)將介紹一種支持 Python 在 Windows 平臺上創(chuàng)建新進(jìn)程的方法。

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

直接創(chuàng)建 Process 類的實(shí)例對象,由此就可以創(chuàng)建一個新的進(jìn)程;

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

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

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

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

接下來將一一對創(chuàng)建進(jìn)程的 2 種方法做詳細(xì)的講解。

通過Process類創(chuàng)建進(jìn)程

和使用 thread 類創(chuàng)建子線程的方式非常類似,使用 Process 類創(chuàng)建實(shí)例化對象,其本質(zhì)是調(diào)用該類的構(gòu)造方法創(chuàng)建新進(jìn)程。Process 類的構(gòu)造方法格式如下:

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

其中,各個參數(shù)的含義為:

  • group:該參數(shù)未進(jìn)行實(shí)現(xiàn),不需要傳參;
  • target:為新建進(jìn)程指定執(zhí)行任務(wù),也就是指定一個函數(shù);
  • name:為新建進(jìn)程設(shè)置名稱;
  • args:為 target 參數(shù)指定的參數(shù)傳遞非關(guān)鍵字參數(shù);
  • kwargs:為 target 參數(shù)指定的參數(shù)傳遞關(guān)鍵字參數(shù)。

下面程序演示了如何用 Process 類創(chuàng)建新進(jìn)程。

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

程序執(zhí)行結(jié)果為:
當(dāng)前進(jìn)程ID: 12980
主進(jìn)程
http://jb51.net/python/ --當(dāng)前進(jìn)程12980
http://jb51.net/shell/ --當(dāng)前進(jìn)程12980
http://jb51.net/java/ --當(dāng)前進(jìn)程12980
當(dāng)前進(jìn)程ID: 12860
my_process進(jìn)程
http://jb51.net/python/ --當(dāng)前進(jìn)程12860
http://jb51.net/shell/ --當(dāng)前進(jìn)程12860
http://jb51.net/java/ --當(dāng)前進(jìn)程12860

需要說明的是,通過 multiprocessing.Process 來創(chuàng)建并啟動進(jìn)程時,程序必須先判斷 if __name__=='__main__':,否則運(yùn)行該程序會引發(fā)異常。

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

通過Process繼承類創(chuàng)建進(jìn)程

和使用 thread 子類創(chuàng)建線程的方式類似,除了直接使用 Process 類創(chuàng)建進(jìn)程,還可以通過創(chuàng)建 Process 的子類來創(chuàng)建進(jìn)程。

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

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

from multiprocessing import Process
import os
print("當(dāng)前進(jìn)程ID:",os.getpid())
# 定義一個函數(shù),供主進(jìn)程調(diào)用
def action(name,*add):
 print(name)
 for arc in add:
  print("%s --當(dāng)前進(jìn)程%d" % (arc,os.getpid()))
#自定義一個進(jìn)程類
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āng)前進(jìn)程%d" % (arc,os.getpid()))
if __name__=='__main__':
 #定義為進(jìn)程方法傳入的參數(shù)
 my_tuple = ("http://jb51.net/python/",\
    "http://jb51.net/shell/",\
    "http://jb51.net/java/")
 my_process = My_Process("my_process進(jìn)程",*my_tuple)
 #啟動子進(jìn)程
 my_process.start()
 #主進(jìn)程執(zhí)行該函數(shù)
 action("主進(jìn)程",*my_tuple)

程序執(zhí)行結(jié)果為:
當(dāng)前進(jìn)程ID: 22240
主進(jìn)程
http://jb51.net/python/ --當(dāng)前進(jìn)程22240
http://jb51.net/shell/ --當(dāng)前進(jìn)程22240
http://jb51.net/java/ --當(dāng)前進(jìn)程22240
當(dāng)前進(jìn)程ID: 18848
my_process進(jìn)程
http://jb51.net/python/ --當(dāng)前進(jìn)程18848
http://jb51.net/shell/ --當(dāng)前進(jìn)程18848
http://jb51.net/java/ --當(dāng)前進(jìn)程18848

顯然,該程序的運(yùn)行結(jié)果與上一個程序的運(yùn)行結(jié)果大致相同,它們只是創(chuàng)建進(jìn)程的方式略有不同而已。
推薦讀者使用第一種方式來創(chuàng)建進(jìn)程,因?yàn)檫@種方式不僅編程簡單,而且進(jìn)程直接包裝 target 函數(shù),具有更清晰的邏輯結(jié)構(gòu)。

到此這篇關(guān)于Python Process創(chuàng)建進(jìn)程的2種方法詳解的文章就介紹到這了,更多相關(guān)Python Process創(chuàng)建進(jìn)程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python爬蟲之Selenium鼠標(biāo)事件的實(shí)現(xiàn)

    Python爬蟲之Selenium鼠標(biāo)事件的實(shí)現(xiàn)

    這篇文章主要介紹了Python爬蟲之Selenium鼠標(biāo)事件的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Python的Flask框架中的Jinja2模板引擎學(xué)習(xí)教程

    Python的Flask框架中的Jinja2模板引擎學(xué)習(xí)教程

    這篇文章主要介紹了Python的Flask框架中的Jinja2模板引擎學(xué)習(xí)教程,Jinja2模板引擎的用法也是Flask的Web開發(fā)中的重要知識,需要的朋友可以參考下
    2016-06-06
  • python實(shí)現(xiàn)數(shù)學(xué)模型(插值、擬合和微分方程)

    python實(shí)現(xiàn)數(shù)學(xué)模型(插值、擬合和微分方程)

    這篇文章主要介紹了python實(shí)現(xiàn)數(shù)學(xué)模型(插值、擬合和微分方程),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • python中redis查看剩余過期時間及用正則通配符批量刪除key的方法

    python中redis查看剩余過期時間及用正則通配符批量刪除key的方法

    這篇文章主要介紹了python中redis查看剩余過期時間及用正則通配符批量刪除key的方法,需要的朋友可以參考下
    2018-07-07
  • 教你用pytorch訓(xùn)練五子棋ai示例代碼

    教你用pytorch訓(xùn)練五子棋ai示例代碼

    這篇文章主要介紹了五個與五子棋相關(guān)的Python文件,包括游戲邏輯、神經(jīng)網(wǎng)絡(luò)模型、訓(xùn)練代碼以及玩家對戰(zhàn)代碼,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • wxPython實(shí)現(xiàn)分隔窗口

    wxPython實(shí)現(xiàn)分隔窗口

    這篇文章主要為大家詳細(xì)介紹了wxPython實(shí)現(xiàn)分隔窗口,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • Python3利用openpyxl讀寫Excel文件的方法實(shí)例

    Python3利用openpyxl讀寫Excel文件的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于Python3利用openpyxl讀寫Excel文件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 使用PyWeChatSpy自動回復(fù)微信拍一拍功能的實(shí)現(xiàn)代碼

    使用PyWeChatSpy自動回復(fù)微信拍一拍功能的實(shí)現(xiàn)代碼

    這篇文章主要介紹了用PyWeChatSpy自動回復(fù)微信拍一拍功能,本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Pytes正確的配置使用日志功能

    Pytes正確的配置使用日志功能

    在pytest自動化測試中,如果只是簡單的從應(yīng)用的角度來說,完全可以不去了解pytest中的顯示信息的部分以及原理,可以通過使用推薦的pytest.ini配置,從而可以做到相對來說比較通用的日志配置,這篇文章主要介紹了Pytes如何正確的配置使用日志功能,需要的朋友可以參考下
    2022-12-12
  • Python 實(shí)現(xiàn)輸入任意多個數(shù),并計(jì)算其平均值的例子

    Python 實(shí)現(xiàn)輸入任意多個數(shù),并計(jì)算其平均值的例子

    今天小編就為大家分享一篇Python 實(shí)現(xiàn)輸入任意多個數(shù),并計(jì)算其平均值的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07

最新評論

容城县| 子洲县| 绥德县| 五原县| 墨江| 砀山县| 岢岚县| 柳河县| 北碚区| 鲜城| 桑植县| 湘西| 彭山县| 区。| 普洱| 绥棱县| 临澧县| 孝义市| 茶陵县| 克东县| 重庆市| 南华县| 五台县| 醴陵市| 钟祥市| 宜春市| 洛阳市| 中西区| 出国| 策勒县| 土默特右旗| 郸城县| 海伦市| 栾城县| 都匀市| 长顺县| 辉南县| 肇州县| 上犹县| 辉县市| 汝城县|