利用multiprocessing.Process物件可以建立一個程式,該Process物件與Thread物件的用法相同,也有start(), run(), join()等方法。Process類適合簡單的程式建立,如需資源共享可以結合multiprocessing.Queue使用;如果想要控制程式數量,則建議使用程式池Pool類。
Process介紹
構造方法:
- Process([group [, target [, name [, args [, kwargs]]]]])
- group: 執行緒組,目前還沒有實現,庫引用中提示必須是None;
- target: 要執行的方法;
- name: 程式名;
- args/kwargs: 要傳入方法的引數。
例項方法:
- is_alive():返回程式是否在執行。
- join([timeout]):阻塞當前上下文環境的程式程,直到呼叫此方法的程式終止或到達指定的timeout(可選引數)。
- start():程式準備就緒,等待CPU排程。
- run():strat()呼叫run方法,如果例項程式時未制定傳入target,這star執行t預設run()方法。
- terminate():不管任務是否完成,立即停止工作程式。
屬性:
- authkey
- daemon:和執行緒的setDeamon功能一樣(將父程式設定為守護程式,當父程式結束時,子程式也結束)。
- exitcode(程式在執行時為None、如果為–N,表示被訊號N結束)。
- name:程式名字。
- pid:程式號。
建立多程式的兩種方法
Process類中,可以使用兩種方法建立子程式。
使用Process建立子程式
說明:用法與Threading相似
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
from multiprocessing import Process #匯入Process模組 import os def test(name): ''' 函式輸出當前程式ID,以及其父程式ID。 此程式碼應在Linux下執行,因為windows下os模組不支援getppid() ''' print "Process ID: %s" % (os.getpid()) print "Parent Process ID: %s" % (os.getppid()) if __name__ == "__main__": ''' windows下,建立程式的程式碼一下要放在main函式裡面 ''' proc = Process(target=test, args=('nmask',)) proc.start() proc.join() |
使用Process類繼承建立子程式
說明:通過繼承Process類,修改run函式程式碼。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
from multiprocessing import Process import time class MyProcess(Process): ''' 繼承Process類,類似threading.Thread ''' def __init__(self, arg): super(MyProcess, self).__init__() #multiprocessing.Process.__init__(self) self.arg = arg def run(self): ''' 重構run函式 ''' print 'nMask', self.arg time.sleep(1) if __name__ == '__main__': for i in range(10): p = MyProcess(i) p.start() for i in range(10): p.join() |
傳送門
【Multiprocessing系列】共享資源
【Multiprocessing系列】子程式返回值
【Multiprocessing系列】Pool
【Multiprocessing系列】Process
【Multiprocessing系列】Multiprocessing基礎