首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gUnicorn/gevent:请求库抛出RecursionError:超出最大递归深度

gUnicorn/gevent:请求库抛出RecursionError:超出最大递归深度
EN

Stack Overflow用户
提问于 2018-10-11 23:55:40
回答 1查看 1.2K关注 0票数 2

我有一个使用gunicorn和gevent部署的Flask应用程序。我已经放好了

代码语言:javascript
复制
import gevent.monkey
gevent.monkey.patch_all()

在app.py文件的顶部。

但我仍然收到以下警告和错误:

代码语言:javascript
复制
MonkeyPatchWarning: Monkey-patching ssl after ssl has already been imported may lead to errors, including RecursionError on Python 3.6. It may also silently lead to incorrect behaviour on Python 3.7. Please monkey-patch earlier. See https://github.com/gevent/gevent/issues/1016. Modules that had direct imports (NOT patched): ['requests.packages.urllib3.util


  File "/home/travis/virtualenv/python3.6.3/lib/python3.6/site-packages/requests/api.py", line 110, in post
    return request('post', url, data=data, json=json, **kwargs)
  File "/home/travis/virtualenv/python3.6.3/lib/python3.6/site-packages/requests/api.py", line 56, in request
    return session.request(method=method, url=url, **kwargs)
  File "/home/travis/virtualenv/python3.6.3/lib/python3.6/site-packages/requests/sessions.py", line 475, in request
    resp = self.send(prep, **send_kwargs)
  File "/home/travis/virtualenv/python3.6.3/lib/python3.6/site-packages/requests/sessions.py", line 596, in send
    r = adapter.send(request, **kwargs)
  File "/home/travis/virtualenv/python3.6.3/lib/python3.6/site-packages/requests/adapters.py", line 423, in send
    timeout=timeout
  File "/home/travis/virtualenv/python3.6.3/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py", line 595, in urlopen
    chunked=chunked)
  File "/home/travis/virtualenv/python3.6.3/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py", line 352, in _make_request
    self._validate_conn(conn)
  File "/home/travis/virtualenv/python3.6.3/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py", line 831, in _validate_conn
    conn.connect()
  File "/home/travis/virtualenv/python3.6.3/lib/python3.6/site-packages/requests/packages/urllib3/connection.py", line 289, in connect
    ssl_version=resolved_ssl_version)
  File "/home/travis/virtualenv/python3.6.3/lib/python3.6/site-packages/requests/packages/urllib3/util/ssl_.py", line 291, in ssl_wrap_socket
    ciphers=ciphers)
  File "/home/travis/virtualenv/python3.6.3/lib/python3.6/site-packages/requests/packages/urllib3/util/ssl_.py", line 254, in create_urllib3_context
    context.options |= options
  File "/opt/python/3.6.3/lib/python3.6/ssl.py", line 465, in options
    super(SSLContext, SSLContext).options.__set__(self, value)
  File "/opt/python/3.6.3/lib/python3.6/ssl.py", line 465, in options
    super(SSLContext, SSLContext).options.__set__(self, value)
  File "/opt/python/3.6.3/lib/python3.6/ssl.py", line 465, in options
    super(SSLContext, SSLContext).options.__set__(self, value)
  [Previous line repeated 306 more times]
RecursionError: maximum recursion depth exceeded
EN

回答 1

Stack Overflow用户

发布于 2021-03-16 03:17:18

我们遇到了类似的问题,并发现我们正在用ddtrace-run (数据跟踪程序)包装gunicorn,并且ddtrace-run甚至在gevent可以对其进行monkeypatch之前就调用了urllib3。有关该错误的更多详细信息,请访问dd-trace-py/issues/506。为了解决这个bug,我们升级到了最新版本的ddtrace-run。

代码语言:javascript
复制
ddtrace-run gunicorn -b 0.0.0.0:${PORT} --log-level=${GUNICORN_LOG_LEVEL} ... 'app.main:main()'

如果您在app.py的顶部添加了gevent.monkey.patch_all(),那么请仔细检查您是如何调用gunicorn入口点的。在gevent和调用SSL之前将会有一些事情发生。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52764313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档