創建進程的類:Process([group?[,?target?[,?name?[,?args?[,?kwargs]]]]]),target表示調用對象,args表示調用對象的位置參數元組。kwargs表示調用對象的字典。name為別名。group實質上不使用。
方法:is_alive()、join([timeout])、run()、start()、terminate()。其中,Process以start()啟動某個進程。
屬性:authkey、daemon(要通過start()設置)、exitcode(進程在運行時為None、如果為–N,表示被信號N結束)、name、pid。其中daemon是父進程終止後自動終止,且自己不能產生新進程,必須在start()之前設置。
例1.1:創建函數並將其作為單個進程
import?multiprocessing
import?time
def?worker(interval):
n?=?5
while?n?>?0:
print("The?time?is?{0}".format(time.ctime()))
time.sleep(interval)
n?-=?1
if?__name__?==?"__main__":
p?=?multiprocessing.Process(target?=?worker,?args?=?(3,))
p.start()
print?"p.pid:",?p.pid
print?"p.name:",?p.name
print?"p.is_alive:",?p.is_alive()
結果
12345678p.pid:?8736p.name:?Process-1p.is_alive:?TrueThe?time?is?Tue?Apr?21?20:55:12?2015The?time?is?Tue?Apr?21?20:55:15?2015The?time?is?Tue?Apr?21?20:55:18?2015The?time?is?Tue?Apr?21?20:55:21?2015The?time?is?Tue?Apr?21?20:55:24?2015
例1.2:創建函數並將其作為多個進程
import?multiprocessing
import?time
def?worker_1(interval):
print?"worker_1"
time.sleep(interval)
print?"end?worker_1"
def?worker_2(interval):
print?"worker_2"
time.sleep(interval)
print?"end?worker_2"
def?worker_3(interval):
print?"worker_3"
time.sleep(interval)
print?"end?worker_3"
if?__name__?==?"__main__":
p1?=?multiprocessing.Process(target?=?worker_1,?args?=?(2,))
p2?=?multiprocessing.Process(target?=?worker_2,?args?=?(3,))
p3?=?multiprocessing.Process(target?=?worker_3,?args?=?(4,))
p1.start()
p2.start()
p3.start()
print("The?number?of?CPU?is:"?+?str(multiprocessing.cpu_count()))
for?p?in?multiprocessing.active_children():
print("childp.name:"?+?p.name?+?"\tp.id"?+?str(p.pid))
print?"END!!!!!!!!!!!!!!!!!"
結果
1234567891011The?number?of?CPU?is:4childp.name:Process-3p.id7992childp.name:Process-2p.id4204childp.name:Process-1p.id6380END!!!!!!!!!!!!!!!!!worker_1worker_3worker_2end?worker_1end?worker_2end?worker_3
例1.3:將進程定義為類
import?multiprocessing
import?time
class?ClockProcess(multiprocessing.Process):
def?__init__(self,?interval):
multiprocessing.Process.__init__(self)
self.interval?=?interval
def?run(self):
n?=?5
while?n?>?0:
print("the?time?is?{0}".format(time.ctime()))
time.sleep(self.interval)
n?-=?1
if?__name__?==?'__main__':
p?=?ClockProcess(3)
p.start()?
註:進程p調用start()時,自動調用run()
結果
12345the?time?is?Tue?Apr?21?20:31:30?2015the?time?is?Tue?Apr?21?20:31:33?2015the?time?is?Tue?Apr?21?20:31:36?2015the?time?is?Tue?Apr?21?20:31:39?2015the?time?is?Tue?Apr?21?20:31:42?2015