Python 進程操作之數據共享--Manager
進程之間的數據共享
展望未來,基于消息傳遞的并發編程是大勢所趨
即便是使用線程,推薦做法也是將程序設計為大量獨立的線程集合,通過消息隊列交換數據。
這樣極大地減少了對使用鎖定和其他同步手段的需求,還可以擴展到分布式系統中。
但進程間應該盡量避免通信,即便需要通信,也應該選擇進程安全的工具來避免加鎖帶來的問題。
以后我們會嘗試使用數據庫來解決現在進程之間的數據共享問題。
Manager模塊介紹:
進程間數據是獨立的,可以借助于隊列或管道實現通信,二者都是基于消息傳遞的 雖然進程間數據獨立,但可以通過Manager實現數據共享,事實上Manager的功能遠不止于此 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.
Manager例子:
from?multiprocessing?import?Manager,Process,Lock def?work(d,lock): ????with?lock:?#不加鎖而操作共享的數據,肯定會出現數據錯亂 ????????d['count']-=1 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
軟件開發 人工智能 云計算 機器學習
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。