1. 程式人生 > >Python基礎5

Python基礎5

name 同步 __name__ and TP spa pid style import

多進程

multiprocessing模塊提供了一個Process類來代表一個進程對象,下面的例子演示了啟動一個子進程並等待其結束:

from multiprocessing import Process
import os

#子進程要執行的代碼
def run_proc(name):
    print(Run child process %s (%s) % (name,os.getpid()))

if __name__==__main__:
    print(Parent process %s. % os.getpid())
    p=Process(target=run_proc,args=(
test,)) print(Child process will start.) p.start() p.join() #join()方法可以等待子進程結束後再繼續往下運行,通常用於進程間的同步。 print(Child process end.)

Process之間肯定是需要通信的,操作系統提供了很多機制來實現進程間的通信。Python的multiprocessing模塊包裝了底層的機制,提供了QueuePipes等多種方式來交換數據。我們以Queue為例,在父進程中創建兩個子進程,一個往Queue裏寫數據,一個從Queue裏讀數據:

from
multiprocessing import Process, Queue import os, time, random # 寫數據進程執行的代碼: def write(q): print(Process to write: %s % os.getpid()) for value in [A, B, C]: print(Put %s to queue... % value) q.put(value) time.sleep(random.random()) # 讀數據進程執行的代碼: def read(q):
print(Process to read: %s % os.getpid()) while True: value = q.get(True) print(Get %s from queue. % value) if __name__==__main__: # 父進程創建Queue,並傳給各個子進程: q = Queue() pw = Process(target=write, args=(q,)) pr = Process(target=read, args=(q,)) # 啟動子進程pw,寫入: pw.start() # 啟動子進程pr,讀取: pr.start() # 等待pw結束: pw.join() # pr進程裏是死循環,無法等待其結束,只能強行終止: pr.terminate()

Python基礎5