【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]})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值