目錄
-
一、進程之間的數據共享
- 1.1 Manager模塊介紹
- 1.2 Manager例子
一、進程之間的數據共享
展望未來,基于消息傳遞的并發編程是大勢所趨
即便是使用線程,推薦做法也是將程序設計為大量獨立的線程集合,通過消息隊列交換數據。
這樣極大地減少了對使用鎖定和其他同步手段的需求,還可以擴展到分布式系統中。
但進程間應該盡量避免通信,即便需要通信,也應該選擇進程安全的工具來避免加鎖帶來的問題。
以后我們會嘗試使用數據庫來解決現在進程之間的數據共享問題。
1.1 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.
1.2 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)
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
