當前位置:編程學習大全網 - 編程語言 - 如何使用Python實現多進程編程

如何使用Python實現多進程編程

1.?Process

創建進程的類: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

  • 上一篇:Linux內核中斷之中斷調用流程
  • 下一篇:CAD在模具設計中的應用?
  • copyright 2024編程學習大全網