展望將來,基於消息傳遞的併發編程是大勢所趨python
即使是使用線程,推薦作法也是將程序設計爲大量獨立的線程集合,經過消息隊列交換數據。數據庫
這樣極大地減小了對使用鎖定和其餘同步手段的需求,還能夠擴展到分佈式系統中。編程
但進程間應該儘可能避免通訊,即使須要通訊,也應該選擇進程安全的工具來避免加鎖帶來的問題。安全
之後咱們會嘗試使用數據庫來解決如今進程之間的數據共享問題。併發
雖然進程間數據獨立,但能夠經過Manager實現數據共享,事實上Manager的功能遠不止於此。app
A manager object returned by Manager() controls a server process which holds Python objects and allows other processes to manipulate them using proxies.分佈式
A manager returned by Manager() will support types list, dict, Namespace, Lock, RLock, Semaphore, BoundedSemaphore, Condition, Event, Barrier, Queue, Value and Array.工具
from multiprocessing import Manager,Process,Lock def work(d,lock): lock.acquire() d['count'] -= 1 lock.release() if __name__ == '__main__': lock = Lock() with Manager() as m: dic = m.dict({'count':100})#生成一個字典,可在多個進程間共享和傳遞 p_l = [] for i in range(100): p = Process(target=work,args=(dic,lock)) p_l.append(p) p.start() for p in p_l: #等待結果 p.join() print(dic)
{'count':0}ui