37,720
社区成员
发帖
与我相关
我的任务
分享
>>> 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)"
>>>
import multiprocessing
def f(ns):
ns.x *= 10
ns.y *= 10
if 'testkey' in ns.d:
v = ns.d['testkey'] * 10
ns.d = {'testkey': v}
if __name__ == '__main__':
manager = multiprocessing.Manager()
ns = manager.Namespace()
ns.x = 1
ns.y = 2
ns.d = {'testkey': 3}
print 'before', ns
p = multiprocessing.Process(target=f, args=(ns,))
p.start()
p.join()
print 'after', ns
import multiprocessing
def f(ns):
ns.x *= 10
ns.y *= 10
if 'testkey' in ns.d:
v = ns.d['testkey'] * 10
ns.d = {'testkey': v}
if __name__ == '__main__':
manager = multiprocessing.Manager()
ns = manager.Namespace()
ns.x = 1
ns.y = 2
ns.d = {'testkey': 3}
print 'before', ns