python3.5中的Bug?list(globals().items())导致运行时错误:字典在迭代期间更改了大小

2024-06-16 10:35:02 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我追踪的一部分。我不知道怎么可能。你知道吗

我认为没有多线程。但是,即使有一个线程正在更改gloabls(),在列表创建过程中是否有可能更改globals()?我以为list()呼叫是用GIL保护的,不是吗?你知道吗

我复制了两次,但现在不能复制了。你知道吗

你知道怎么可能吗?你知道吗

源代码:https://github.com/python/cpython/blob/3.5/Lib/lib2to3/pgen2/token.py#L73

Python 3.5.2,CentOS Linux 7.4.1708版

from past.builtins import basestring
  File "/home/user/app/lib64/python3.5/site-packages/past/__init__.py", line 88, in <module>
from past.translation import install_hooks as autotranslate
  File "/home/user/app/lib64/python3.5/site-packages/past/translation/__init__.py", line 41, in <module>
from lib2to3.pgen2.parse import ParseError
  File "/usr/lib64/python3.5/lib2to3/pgen2/parse.py", line 14, in <module>
from . import token
  File "/usr/lib64/python3.5/lib2to3/pgen2/token.py", line 73, in <module>
for _name, _value in list(globals().items()):
RuntimeError: dictionary changed size during iteration

Tags: infrompyimporttokenhomelinelist