91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python process模塊怎么用

發布時間:2022-01-24 15:54:46 來源:億速云 閱讀:151 作者:zzz 欄目:開發技術

今天小編給大家分享一下python process模塊怎么用的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

process可以用于node和系統中已經存在的進程進行交互,創建工作子進程等,process模塊是一個全局對象,允許你獲得或者修改當前node進程的設置。

python process模塊怎么用

process模塊

process模塊是一個創建進程的模塊,借助這個模塊,就可以完成進程的創建。

參數介紹:

Process(group=None, target=None, name=None, args=(), kwargs={})

1 group——參數未使用,值始終為None
2 target——表示調用對象,即子進程要執行的任務
3 args——表示調用對象的位置參數元組,args=(1,2,'egon',)
4 kwargs——表示調用對象的字典,kwargs={'name':'egon','age':18}
5 name——為子進程的名稱

方法介紹:

obj.start():啟動進程,并調用該子進程中的obj.run()
obj.run():進程啟動時運行的方法,正是它去調用target指定的函數,我們自定義類的類中一定要實現該方法
obj.terminate():強制終止進程obj,不會進行任何清理操作,如果obj創建了子進程,該子進程就成了僵尸進程,使用該方法需要特別小心這種情況。如果obj還保存了一個鎖那么也將不會被釋放,進而導致死鎖
obj.is_alive():如果obj仍然運行,返回True
obj.join([timeout]):主線程等待obj終止(強調:是主線程處于等的狀態,而obj是處于運行的狀態)。timeout是可選的超時時間,需要強調的是,obj.join只能join住start開啟的進程,而不能join住run開啟的進程

屬性介紹:

obj.daemon:默認值為False,如果設為True,代表obj為后臺運行的守護進程,當obj的父進程終止時,obj也隨之終止,并且設定為True后,obj不能創建自己的新進程,必須在obj.start()之前設置
obj.name:進程的名稱
obj.pid:進程的pid
obj.exitcode:進程在運行時為None、如果為–N,表示被信號N結束(了解即可)
obj.authkey:進程的身份驗證鍵,默認是由os.urandom()隨機生成的32字符的字符串。這個鍵的用途是為涉及網絡連接的底層進程間通信提供安全性,這類連接只有在具有相同的身份驗證鍵時才能成功(了解即可)

1、在python中啟動一個子進程

from multiprocessing import Process
import os

def func():
   print('這是一個子進程——>進程號:', os.getpid(), '  主進程號:', os.getppid())if __name__ == '__main__':
   print('這是主進程——>進程號:', os.getpid(), '  主進程號(pycharm):', os.getppid())
   # 實例化一個子進程對象   obj = Process(target=func)
   obj.start()     # 執行子進程對象   print('執行了完了主進程的內容')# 輸出這是主進程——>進程號: 3100   主進程號(pycharm): 6748
執行了完了主進程的內容
這是一個子進程——>進程號: 2392   主進程號: 3100

2、給子進程傳遞參數

from multiprocessing import Process
import os


def func(name, age):
   print('這是一個子進程——>進程號:', os.getpid(), '  主進程號:', os.getppid())
   print(f'這是一個子進程——>我的名字是{name},今年{age}')if __name__ == '__main__':
   print('這是主進程——>進程號:', os.getpid(), '  主進程號(pycharm):', os.getppid())
   # 實例化一個子進程對象   obj = Process(target=func, args=('小楊', '18')) # args以元組的形式給子進程func函數傳位置參數                              # kwargs以字典的形式給子進程func函數傳關鍵字參數                              # kwargs={'name': '小楊', 'age': 18}   obj.start()     # 執行子進程對象   print('執行了完了主進程的內容')
   # 輸出這是主進程——>進程號: 11936   主進程號(pycharm): 3676
執行了完了主進程的內容
這是一個子進程——>進程號: 2996   主進程號: 11936
這是一個子進程——>我的名字是小楊,今年18

3、同時開多個子進程

from multiprocessing import Process
import os


def func(name, age):
   print(f'這是一個子進程——>進程號:{os.getpid()},主進程號:{os.getppid()},我的名字是{name},今年{age}')if __name__ == '__main__':
   print('這是主進程——>進程號:', os.getpid(), '  主進程號(pycharm):', os.getppid())
   count = [('小楊', 18), ('鮑勃', 20), ('艾倫', 55)]
   for lis in count:
       # 實例化一個子進程對象       obj = Process(target=func, args=lis)   # args以元組的形式給子進程func函數傳位置參數       obj.start()     # 執行子進程對象   print('執行了完了主進程的內容')
   # 輸出這是主進程——>進程號: 12632   主進程號(pycharm): 9220
執行了完了主進程的內容
這是一個子進程——>進程號:10048,主進程號:12632,我的名字是小楊,今年18
這是一個子進程——>進程號:16032,主進程號:12632,我的名字是鮑勃,今年20
這是一個子進程——>進程號:12060,主進程號:12632,我的名字是艾倫,今年55

4、join的用法

obj.join([timeout]): 主進程等待子進程obj終止(強調:是主進程處于等的狀態,而子進程obj是處于運行的狀態)。timeout是可選的超時時間,需要強調的是,obj.join只能join住start開啟的進程,而不能join住run開啟的進程

多個進程同時運行(注意,子進程的執行順序不是根據啟動順序決定的)

join——>屬于同步阻塞:

同步:在做A事件的時候發起B事件,必須等待B事件結束后才能繼續做A事件

阻塞:CPU不工作——>input accept recv recvfrom sleep connect……

start——>屬于異步非阻塞:

異步:在做A事件的時候發起B事件,不用等待B事件結束就可以繼續A事件

非阻塞:CPU在工作(非輸入輸出階段I/O)

from multiprocessing import Process
import random
import time


def mail(name, age):
   count = random.random()
   print(f'給{age}歲的{name}發了一封郵件!延遲{count}秒')
   time.sleep(count)      # 模擬網絡延遲   """
   多個進程同時運行(注意,子進程的執行順序不是根據啟動順序決定的)
   """if __name__ == '__main__':
   info_list = [('小楊', 18), ('鮑勃', 20), ('艾倫', 55)]
   jo = []
   for info in info_list:
       obj = Process(target=mail, args=info)
       obj.start()
       jo.append(obj)

   # 將所有的子進程全部放入jo列表,在循環join所有子進程,就能等待所有子進程結束后在做操作   for o in jo:
       o.join()

   # 所有的子進程結束的操作   print('全部發送完畢')
   # 輸出給20歲的鮑勃發了一封郵件!延遲0.19840279388911186秒
給18歲的小楊發了一封郵件!延遲0.8891892863366903秒
給55歲的艾倫發了一封郵件!延遲0.0434307277609951秒
全部發送完畢

5、多進程之間的數據是否隔離

from multiprocessing import Process

count = 1

def func():
   global count
   count += 1if __name__ == '__main__':
   for i in range(10):
       obj = Process(target=func)
       obj.start()
   print(count)        # ————>1 主進程的count沒有被改變說明進程之間的數據時隔離的   # 輸出1

6、為什么在Windows中Process()必須放到if *name* == ‘*main*‘:下

由于Windows沒有fork,多處理模塊啟動一個新的Python進程并導入調用模塊。

如果在導入時調用Process(),那么這將啟動無限繼承的新進程(或直到機器耗盡資源)。

這是隱藏對Process()內部調用的原,使用if name == ‘main‘:,這個if語句中的語句將不會在導入時被調用。

以上就是“python process模塊怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

洛南县| 青川县| 九江县| 石林| 普格县| 弥勒县| 昂仁县| 漯河市| 苏尼特左旗| 乌苏市| 开封市| 古浪县| 黄浦区| 湖南省| 阳高县| 安仁县| 吴忠市| 德惠市| 连平县| 姚安县| 正安县| 牡丹江市| 田东县| 夏河县| 子洲县| 青铜峡市| 同仁县| 平南县| 衡阳市| 东山县| 凌源市| 正阳县| 滕州市| 肇州县| 绥芬河市| 营口市| 甘德县| 台前县| 奈曼旗| 托克逊县| 东明县|