momo's Blog.

依赖typing-extensions模块导致的递归错误: RecursionError: maximum recursion depth exceeded

字数统计: 1.4k阅读时长: 8 min
2021/11/24 Share

前言

在部署蓝鲸saas的时候, uwsgi报错.

错误内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
Wed Nov 24 10:56:48 2021 - chdir() to /data/bkce/paas_agent/apps/projects/opsapi/code/opsapi
Wed Nov 24 10:56:48 2021 - writing pidfile to /data/bkce/paas_agent/apps/projects/opsapi/run/uwsgi.pid
Wed Nov 24 10:56:48 2021 - your processes number limit is 63202
Wed Nov 24 10:56:48 2021 - your memory page size is 4096 bytes
Wed Nov 24 10:56:48 2021 - detected max file descriptor number: 102400
Wed Nov 24 10:56:48 2021 - lock engine: pthread robust mutexes
Wed Nov 24 10:56:48 2021 - thunder lock: disabled (you can enable it with --thunder-lock)
Wed Nov 24 10:56:48 2021 - [busyness] settings: min=25%, max=50%, overload=5, multiplier=60, respawn penalty=2
Wed Nov 24 10:56:48 2021 - [busyness] backlog alert is set to 33 request(s), step is 1
Wed Nov 24 10:56:48 2021 - [busyness] backlog non-zero alert is set to 60 second(s)
Wed Nov 24 10:56:48 2021 - uwsgi socket 0 bound to UNIX address /data/bkce/paas_agent/apps/projects/opsapi/run/uwsgi.sock fd 3
Wed Nov 24 10:56:48 2021 - Python version: 3.6.7 (default, Jan 28 2019, 17:30:30) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
Wed Nov 24 10:56:48 2021 - *** Python threads support is disabled. You can enable it with --enable-threads ***
Wed Nov 24 10:56:48 2021 - Python main interpreter initialized at 0x2004df0
Wed Nov 24 10:56:48 2021 - your server socket listen backlog is limited to 100 connections
Wed Nov 24 10:56:48 2021 - your mercy for graceful operations on workers is 60 seconds
Wed Nov 24 10:56:48 2021 - mapped 1445952 bytes (1412 KB) for 16 cores
Wed Nov 24 10:56:48 2021 - *** Operational MODE: preforking ***
Wed Nov 24 10:56:48 2021 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x2004df0 pid: 4999 (default app)
Wed Nov 24 10:56:48 2021 - mounting wsgi.py on /t/opsapi
Traceback (most recent call last):
File "wsgi.py", line 29, in <module>
application = get_wsgi_application()
File "./blueapps/core/wsgi.py", line 27, in get_wsgi_application
django.setup(set_prefix=False)
File "/data/bkce/paas_agent/apps/Envs/opsapi/lib/python3.6/site-packages/django/__init__.py", line 19, in setup
configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
File "/data/bkce/paas_agent/apps/Envs/opsapi/lib/python3.6/site-packages/django/conf/__init__.py", line 79, in __getattr__
self._setup(name)
File "/data/bkce/paas_agent/apps/Envs/opsapi/lib/python3.6/site-packages/django/conf/__init__.py", line 66, in _setup
self._wrapped = Settings(settings_module)
File "/data/bkce/paas_agent/apps/Envs/opsapi/lib/python3.6/site-packages/django/conf/__init__.py", line 157, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "/opt/py36/lib/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "./settings.py", line 34, in <module>
_module = __import__(DJANGO_CONF_MODULE, globals(), locals(), ["*"])
File "./config/__init__.py", line 20, in <module>
from blueapps.core.celery import celery_app
File "./blueapps/core/celery/__init__.py", line 14, in <module>
from blueapps.core.celery.celery import app as celery_app
File "./blueapps/core/celery/celery.py", line 18, in <module>
from celery import Celery, platforms
File "<frozen importlib._bootstrap>", line 1020, in _handle_fromlist
File "/data/bkce/paas_agent/apps/Envs/opsapi/lib/python3.6/site-packages/celery/local.py", line 509, in __getattr__
module = __import__(self._object_origins[name], None, None, [name])
File "/data/bkce/paas_agent/apps/Envs/opsapi/lib/python3.6/site-packages/celery/app/__init__.py", line 10, in <module>
from .base import Celery
File "/data/bkce/paas_agent/apps/Envs/opsapi/lib/python3.6/site-packages/celery/app/base.py", line 32, in <module>
from celery.utils.collections import AttributeDictMixin
File "/data/bkce/paas_agent/apps/Envs/opsapi/lib/python3.6/site-packages/celery/utils/collections.py", line 238, in <module>
MutableMapping.register(DictAttribute) # noqa: E305
File "/opt/py36/lib/python3.6/abc.py", line 158, in register
if issubclass(subclass, cls):
File "/opt/py36/lib/python3.6/abc.py", line 228, in __subclasscheck__
if issubclass(subclass, scls):
File "/opt/py36/lib/python3.6/typing.py", line 1154, in __subclasscheck__
return super().__subclasscheck__(cls)
File "/opt/py36/lib/python3.6/abc.py", line 228, in __subclasscheck__
if issubclass(subclass, scls):
File "/data/bkce/paas_agent/apps/Envs/opsapi/lib/python3.6/site-packages/typing_extensions.py", line 355, in __subclasscheck__
if issubclass(subclass, scls):
File "/data/bkce/paas_agent/apps/Envs/opsapi/lib/python3.6/site-packages/typing_extensions.py", line 355, in __subclasscheck__
if issubclass(subclass, scls):
File "/data/bkce/paas_agent/apps/Envs/opsapi/lib/python3.6/site-packages/typing_extensions.py", line 355, in __subclasscheck__
if issubclass(subclass, scls):
File "/data/bkce/paas_agent/apps/Envs/opsapi/lib/python3.6/site-packages/typing_extensions.py", line 355, in __subclasscheck__
if issubclass(subclass, scls):
File "/data/bkce/paas_agent/apps/Envs/opsapi/lib/python3.6/site-packages/typing_extensions.py", line 355, in __subclasscheck__
if issubclass(subclass, scls):
File "/data/bkce/paas_agent/apps/Envs/opsapi/lib/python3.6/site-packages/typing_extensions.py", line 355, in __subclasscheck__
if issubclass(subclass, scls):
File "/data/bkce/paas_agent/apps/Envs/opsapi/lib/python3.6/site-packages/typing_extensions.py", line 355, in __subclasscheck__
if issubclass(subclass, scls):
File "/data/bkce/paas_agent/apps/Envs/opsapi/lib/python3.6/site-packages/typing_extensions.py", line 355, in __subclasscheck__
if issubclass(subclass, scls):
File "/data/bkce/paas_agent/apps/Envs/opsapi/lib/python3.6/site-packages/typing_extensions.py", line 355, in __subclasscheck__
if issubclass(subclass, scls):
File "/data/bkce/paas_agent/apps/Envs/opsapi/lib/python3.6/site-packages/typing_extensions.py", line 355, in __subclasscheck__
if issubclass(subclass, scls):
File "/data/bkce/paas_agent/apps/Envs/opsapi/lib/python3.6/site-packages/typing_extensions.py", line 355, in __subclasscheck__
if issubclass(subclass, scls):
File "/data/bkce/paas_agent/apps/Envs/opsapi/lib/python3.6/site-packages/typing_extensions.py", line 355, in __subclasscheck__
if issubclass(subclass, scls):
File "/data/bkce/paas_agent/apps/Envs/opsapi/lib/python3.6/site-packages/typing_extensions.py", line 355, in __subclasscheck__
if issubclass(subclass, scls):
File "/data/bkce/paas_agent/apps/Envs/opsapi/lib/python3.6/site-packages/typing_extensions.py", line 355, in __subclasscheck__
if issubclass(subclass, scls):
...
...
...
File "/data/bkce/paas_agent/apps/Envs/opsapi/lib/python3.6/site-packages/typing_extensions.py", line 355, in __subclasscheck__
if issubclass(subclass, scls):
File "/data/bkce/paas_agent/apps/Envs/opsapi/lib/python3.6/site-packages/typing_extensions.py", line 350, in __subclasscheck__
if self.__extra__ in subclass.__mro__:
RecursionError: maximum recursion depth exceeded in comparison
Wed Nov 24 10:56:49 2021 - VACUUM: pidfile2 removed.
Wed Nov 24 10:56:49 2021 - VACUUM: unix socket /data/bkce/paas_agent/apps/projects/opsapi/run/uwsgi.sock removed.

问题分析

因为代码原因导致的递归错误, 没办法, 只能通过关键词 typing_extensions.py RecursionError进行google.

最终定位问题.

在官方库中, 发现了一个issue

1
2
3
4
5
typing_extensions==3.6.5 does not seem to be affected by this issue, at least not with the snippet used to trigger the issue on typing_extension=3.6.2.1.

I checked the diff between the two versions and I see the presence of test_isinstance_collections that checks those cases, so I assume that this should not happen on newer versions.

Could eventually be possible to add a small changelog/history for this package?

看起来似乎是某一个版本导致的问题.

解决

typing-extensions 模块指定版本

1
typing-extensions==3.7.4.3
CATALOG
  1. 1. 前言
  2. 2. 错误内容
  3. 3. 问题分析
  4. 4. 解决