1. 程式人生 > >並發編程之多進程進程進程

並發編程之多進程進程進程

daemon art 多線程 模塊 roc -s 編程 驗證 並發

Python 並發編程之多進程

1.1 multiprocessing 模塊

Python 中的多線程無法利用多核資源,如果想要充分的使用多核 cpu 的資源,在 Python 中大部分情況需要使用多進程. Python 為我們提供了非常好用的多進程包multiprocessing!

os.cpu_coutn()

multiprocessing模塊用來開啟子進程,並在模塊中執行我們定制的任務(如函數,實現功能等).

multiprocessing 模塊的功能有很多:

?支持子進程
?通信和共享數據
?執行不同形式的同步
?提供了 Process,Queue,Pipe,Lock 等組件

與線程不同,進程沒有任何共享狀態,進程修改的數據,改動僅限於該進城內.

1.2 Process 類的介紹

創建進程的類

Process([group [, target [, name [, args [, kwargs]]]]]),由該類實例化得到的對象,表示一個子進程中的任務(尚未啟動)

強調: 1. 需要使用關鍵字的方式來指定參數 2. args指定的為傳給target函數的位置參數,是一個元組形式,必須有逗號

參數介紹

  1. group參數未使用,值始終為 None(並不懂,也不需要懂)
  2. target 表示調用對象,即子進程要執行的任務.
  3. args 表示調用對象的位置參數元組,args = (1,2,3,‘a‘,‘b‘,‘c‘:‘ff‘,)
  4. kwargs 表示調用對象的字典 kwargs = {‘a‘:1,‘b‘:2,‘c‘:3}
  5. name 為子進程的名稱

方法介紹

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

屬性介紹

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

1.3 Process 類的使用

首先第一步:創建並開啟子進程的兩種方式

在 windows 下 Process() 必須放在 ifname == ‘mian:‘下

#開進程的方法
詳見我的 pycharm??

並發編程之多進程進程進程