Python基礎5
阿新 • • 發佈:2018-06-02
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
模塊包裝了底層的機制,提供了Queue
、Pipes
等多種方式來交換數據。我們以Queue
為例,在父進程中創建兩個子進程,一個往Queue
裏寫數據,一個從Queue
裏讀數據:
frommultiprocessing 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