python 多進程共享全局變量之Manager()詳解

這篇文章主要介紹了python 多進程共享全局變量之Manager()詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
Manager支持的類型有

list,dict,Namespace,Lock,RLock,Semaphore,BoundedSemaphore,Condition,Event,Queue,Value和Array。

但當使用Manager處理list、dict等可變數據類型時,需要注意一個陷阱,即Manager對象無法監測到它引用的可變對象值的修改,需要通過觸發__setitem__方法來讓它獲得通知。

而觸發__setitem__方法比較直接的辦法就是增加一箇中間變量,如同在C語言中交換兩個變量的值一樣:

int a=1;int b=2;int tmp=a;a=b;b=tmp;

python例子:

from multiprocessing import Manager,Process
def test_manager():
  m[0]['id'] = 2
m = Manager().list()
m.append({"id":1})
p = Process(target=test_manager)
p.start()
p.join()
print m[0]

執行結果:

{"id":1}

並未改變

修改test_manager()

def test_manager():
 tmp = m[0]
 tmp{"id"} = 2
 m[0] = tmp

此時執行結果即爲:

{"id":2}

另外,對於Process需注意對象要可被序列化pickle
推薦我們的Python學習扣qun:774711191 ,看看前輩們是如何學習的!從基礎的python腳本到web開發、爬蟲、django、數據挖掘等【PDF,實戰源碼】,零基礎到項目實戰的資料都有整理。送給每一位python的小夥伴!每天都有大牛定時講解Python技術,分享一些學習的方法和需要注意的小細節,點擊加入我們的 python學習者聚集地

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章