python多进程变量Manager.dict()

您所在的位置:网站首页 tornado多进程共享对象 python多进程变量Manager.dict()

python多进程变量Manager.dict()

2024-07-03 02:01| 来源: 网络整理| 查看: 265

今天在写工具的时候,遇到一个很恶心的问题,多进程一直数据拿不到,并且会有报错:

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