python 关于multiprocessing中在Namespace的实例下保存dict/list的疑问
想在多进程中保存一个shared dict,想把这个dict放在了Namespace()实例下,结果发现对其的赋值无效(对list类型的也无效),想不明白是什么原因,是Namespace/NamespaceProxy不支持这种通过实例方法赋值的方式么?希望明白的给讲下是怎么回事,或者有什么办法能实现?谢谢!
原脚本太长,因此通过python shell来show我的疑问所在:
>>> from multiprocessing.managers import SyncManager>>> mm=SyncManager()>>> mm.start()>>> nms=mm.Namespace()>>> str(nms)'Namespace()'>>> nms.nr=0 # 简单的变量没有问题>>> str(nms)'Namespace(nr=0)'>>> nms.nr=55 # 无问题>>> str(nms)'Namespace(nr=55)'>>> nms.d=mm.dict() # shared dict>>> nms.d{}>>> str(nms)'Namespace(d={}, nr=55)'>>> nms.d['testkey']=78 # 就是这里,赋值无效,但也不出错>>> str(nms)'Namespace(d={}, nr=55)'>>> d=mm.dict() # 不放在Namespace实例下则正常>>> d['testkey']=89 # 赋值正常>>> d['testkey']89>>> nms.d=mm.dict(thekey=45) # 用一个kv初始化>>> str(nms)"Namespace(d={'thekey': 45}, nr=55)">>> nms.d['shit']=66 # 赋值依然无效,也不出错>>> str(nms)"Namespace(d={'thekey': 45}, nr=55)">>>