manager提供了很多資料共享機制,但是對於一些基礎資料型別來說,是資料不安全的,那麼q:如何解決呢?a: 需要我們自己手動加鎖
frommultiprocessing import manager,process,lock # process開子程序用,lock資料加鎖用,manager程序間資料共享用
def work(d,
lock
): #
lock
.acquire()
# d[
'count
'] -= 1
# lock
.release()
with
lock
: # 上下問管理 注意了lock鎖的並不是'count'這個資料 而是d['count'] -= 1這句**
d['count
'] -= 1
# 這句之前的上文是lock.acquire()下文是lock.release()
if __name__ == '
__main__':
lock =lock()
m =manager() # 例項化乙個m
dic = m.dict() # 呼叫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)
執行結果:
0
程序間預設是資料隔離的,所以一般不會寫資料共享,即使要寫,使用佇列的資料安全性更好一些,一般不用manager。
Python網編 程序池
如果我們有多少個任務就開啟多少個程序,實際上是很浪費資源的。由於我們計算機的cpu個數是有限的,所以我們起的程序數量時完全和cpu個數相關。程序池的概念 魚池是放魚的,水池是放水的,獎金池是放獎金的,顧名思義程序池就是放程序的。我們想象,先建立叫程序池容器,然後製作四個程序放到這個程序池裡,當有任務...
Python網編 守護程序
假如我有500臺機器,跑著500個程序,假如有一部分台機器掛了,我們怎麼能及時的知道呢?我們維護自己的機器當然要及時的直到啦 so 如果我們有乙個監控的軟體來實時的監控是不是就可以解決這個問題啦 其原理是 client端每隔乙個時間段 比如60秒 匯報給server端 沒有在正確的時間收到某台機器的...
Python網編 程序之間的資料隔離
寫在前面 控制台的本質是乙個檔案 檔案操作的時候盡量不要用r w a 如果用要小心檔案指標混亂 隨著程序數量的增多會有一些隱患from multiprocessing import process n 100 定義乙個全域性變數 deffunc global n 通過global改變n的值 n 1 ...