python多进程变量Manager.dict() |
您所在的位置:网站首页 › tornado多进程共享对象 › python多进程变量Manager.dict() |
今天在写工具的时候,遇到一个很恶心的问题,多进程一直数据拿不到,并且会有报错: maximum recursion depth exceeded while calling a Python object搜了下这个报错的意思是递归超过最大限度,可是我就两个for循环嵌套,最大循环也就1w以内,这也能出问题? google了一天,总算明白是什么情况了,这里填坑 多进程的变量Manager.dict()在赋值的时候只能接收一层赋值 # -*- coding: UTF-8 -*- ''' Desprition: multiprocessing.Manager().dict() 赋值问题探讨 Author: Sp4rkW https://sp4rkw.blog.csdn.net/ Modify:2020-02-01 00:45:58 ''' import multiprocessing if __name__ == '__main__': mgr = multiprocessing.Manager() demo1 = mgr.dict() demo1['a'] = 'bb' print("第一种情况:",end='') print(demo1) demo2 = mgr.dict() demo2['a'] = {} demo2['a']['b'] = 'cc' print("第二种情况:",end='') print(demo2) demo3 = mgr.dict() demo3.update({'a':'b'}) print("第三种情况:",end='') print(demo3) demo5 = mgr.dict() demo5['a'] = {} demo5['a'].update({'a':{'a':'b'}}) print("第五种情况:",end='') print(demo5)运行结果如下: 第一种情况:{'a': 'bb'} 第二种情况:{'a': {}} 第三种情况:{'a': 'b'} 第五种情况:{'a': {}}很容易得出一个结论,当我们对其子dict部分进行二次赋值的时候,无效 那是不是mulManager.dict()仅仅支持一层的dict?再来做个测试 demo4 = mgr.dict() demo4.update({'a':{'a':{'a':'b'}}}) print("第四种情况:",end='') print(demo4)输出结果如下: 第四种情况:{'a': {'a': {'a': 'b'}}}可以说明,并不是自身深度限制 那难道我们初始赋值之后,就无法再次赋值了么?答案当然是不对,我们可以进行赋值,但是赋值只能从最外面统一修改,而不能通过索引key值去修改某个值。如果还是没能理解的话,看下面的例子 demo6 = mgr.dict() demo6.update({'a':{'a':{'a':'b'}},'b':{}}) demo6.update({'b':{'a':'b'},'c':{'a1':'b1'}}) print("第六种情况:",end='') print(demo6)输出结果如下: 第六种情况:{'a': {'a': {'a': 'b'}}, 'b': {'a': 'b'}, 'c': {'a1': 'b1'}} |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |