推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
334862132
V2EX  ›  Python

Python 点的太快出现 RuntimeError: dictionary changed size during iteration 报错

  •  
  •   334862132 · Jan 28, 2019 · 4123 views
    This topic created in 2836 days ago, the information mentioned may be changed or developed.
    用的 web.py 搞了一个 app,有的时候个别接口如果点的太快会出现标题里面的报错,跳出去重新点就没事了,影响倒是没有,就是看着很不爽,求一个解决版本
    10 replies  •  2019-02-02 10:05:00 +08:00
    vipppppp
    vipppppp
    Jan 28, 2019❤️1
    1
    你这样鬼知道什么问题啊
    看报错就是你进行迭代的时候对字典进行了增加或者减少操作, 例如:
    a = {1: 2, 3: 4, 5: 6, 7: 8}

    for x in a:
    a.pop(1)

    就会报这个错
    Hyponet
    Hyponet
    Jan 28, 2019❤️1
    2
    字面上看,像是在 for 循环的时候,字典被修改了(新增? pop ?)
    janxin
    janxin
    Jan 28, 2019❤️1
    3
    先拷贝一份再使用? and 不要随意修改多个线程访问的数据
    Hyponet
    Hyponet
    Jan 28, 2019❤️1
    4
    建议:
    1. 如果经常修改,不要用全局的字典(请求间隔离)
    2. 如果需要共享,建议加锁
    neoblackcap
    neoblackcap
    Jan 28, 2019❤️1
    5
    我初步估计就是如 4 楼说的一样,用了一个字典作为全局变量,一并发就挂了。最无脑就是加锁罗
    pythongo
    pythongo
    Jan 28, 2019❤️1
    6
    这不是 py 的锅,我不背
    Philippa
    Philippa
    Jan 28, 2019 via Android❤️1
    7
    这是多进程字典被修改时不要去 for 它,你可以用 multiprocessing Manager dict 复现这个问题。要么加锁要么使用前弄个 copy。而且边写边读很难 debug
    lynskylate
    lynskylate
    Jan 28, 2019 via Android❤️1
    8
    经典的迭代器失效问题,如上加锁或者局部字典
    XxxxD
    XxxxD
    Jan 28, 2019❤️1
    9
    根据楼上
    for i in x.copy():
    334862132
    334862132
    OP
    Feb 2, 2019
    10
    @lynskylate 谢谢 说到迭代器失效 我发现我代码里面有字典用字典生成式写的 字典生成式好像引用了迭代器原理 我已经放假了 等回去后把字典生成式替换了试一下
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1593 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 23:10 · PVG 07:10 · LAX 15:10 · JFK 18:10
    ♥ Do have faith in what you're doing.