八 併發程式設計 程序資料之間共享

2022-07-13 17:27:11 字數 2331 閱讀 4282

一 .manager程序資料之間資料共享

1.資料之間共享概念

展望未來,基於訊息傳遞的併發程式設計是大勢所趨

即便是使用執行緒,推薦做法也是將程式設計為大量獨立的執行緒集合,通過訊息佇列交換資料。

這樣極大地減少了對使用鎖定和其他同步手段的需求,還可以擴充套件到分布式系統中。但程序間應該盡量避免通訊,即便需要通訊,也應該選擇程序安全的工具來避免加鎖帶來的問題。

以後我們會嘗試使用資料庫來解決現在程序之間的資料共享問題。

程序間資料是獨立的,可以借助於佇列或管道實現通訊,二者都是基於訊息傳遞的

雖然程序間資料獨立,但可以通過manager實現資料共享,事實上manager的功能遠不止於此

from  multiprocessing import

process,manager

defaa(dic):

dic[

"num

"]-=1

print(dic) #

if__name__ == '

__main__':

m=manager()

dic=m.dict()

#cc=

p=process(target=aa,args=(dic,))

p.start()

p.join()

print("

主程序",dic) #

主程序

# 注意非同步有乙個問題就是 搶占資源的問題

不加鎖而操作共享的資料,肯定會出現資料錯亂

def

aa(dic):

dic[

"num

"] -= 1

print

(dic) #

if__name__ == '

__main__':

m =manager()

dic = m.dict()

cc=for i in range(50):

p = process(target=aa, args=(dic,))

p.start()

for i in

cc: i.join()

#阻塞同步

print("

主程序",dic)

#主程序

# 注意非同步有乙個問題就是 搶占資源的問題   

解決就加上鎖

from multiprocessing import

process,manager,lock

defaa(dic,look):

look.acquire()

dic[

"num

"] -= 1

print

(dic)

look.release()

if__name__ == '

__main__':

m =manager()

l=lock()

dic = m.dict()

cc=for i in range(50):

p = process(target=aa, args=(dic,l))

p.start()

for i in

cc: i.join()

#阻塞同步

print("

主程序",dic)

from multiprocessing import

manager,process,lock

defwork(d,lock):

with lock:

#不加鎖而操作共享的資料,肯定會出現資料錯亂

d['count

']-=1

if__name__ == '

__main__':

lock=lock()

with manager() as m:

dic=m.dict()

p_l=

for i in range(100):

p=process(target=work,args=(dic,lock))

p.start()

for p in

p_l:

p.join()

print

(dic)

44 併發程式設計 資料共享

一 引入 展望未來,基於訊息傳遞的併發程式設計是大勢所趨 即便是使用執行緒,推薦做法也是將程式設計為大量獨立的執行緒集合。通過訊息佇列交換資料。這樣極大地減少了對使用鎖定和其他同步手段的需求,還可以擴充套件到分布式系統中。程序間應該盡量避免通訊,即便需要通訊,也應該選擇程序安全的工具來避免加鎖帶來的...

python 併發程式設計 資料共享

1.資料共享 實現程序之間的資料共享 from multiprocessing import manager,process class mypro process def init self,dic super init self.dic dic defrun self self.dic coun...

JAVA 併發程式設計 多個執行緒之間共享資料(六)

1。假設每乙個執行緒執行的 同樣。能夠使用同乙個 runnable 物件,這個 runnable 物件中有那個共享資料,比如,賣票系統就能夠這麼做。2,假設每乙個執行緒執行的 不同。這時候須要用不同的 runnable 物件,比如,設計4個執行緒。當中兩個執行緒每次對j新增1。另外兩個執行緒對j每次...