【python】多進程共享變量Manager


Manager的復雜結構賦值問題

Manager的字典類型:

  • 如果value是簡單類型,比如int,可以直接賦值給共享變量,並可以后續直接修改
  • 如果value是復雜類型 ,比如list,dict,則必須先用臨時變量做完所有修改后,最后一次性賦值給共享變量。
from multiprocessing import Manager
import collections

m = Manager()
share_dict = m.dict()

# simple struct 簡單類型可以直接賦值,后續可以直接做加減計算
share_dict["1"] = 1
print share_dict["1"]   # 1
share_dict["1"] += 1
print share_dict["1"]   # 2


# complex struct
share_dict["2"] = list()
print share_dict["2"]   # []
share_dict["2"].append(1)  # error   復雜類型,賦值后再修改,無效
print share_dict["2"]  # []


# correct complex struct assignment
a = collections.defaultdict(list)
a["11"] = [1,2,3]
a["11"].append(4)
share_dict["a"] = a   # 復雜類型的正確賦值方法應該是先用本地變量獲取最終結果,最后一次性賦值給共享變量
print share_dict["a"]  # defaultdict(<type 'list'>, {'11': [1, 2, 3, 4]})


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM