【问题标题】:Gevent exceptions in Django when patching Python modules修补 Python 模块时 Django 中的 Gevent 异常
【发布时间】:2012-02-21 10:51:17
【问题描述】:

我已经安装了 geventgreenlet 库,并在我的 Djano 应用程序的 __init__.py 文件中转储了这两行:

from gevent import monkey
monkey.patch_all()

现在我经常在我的 Django 控制台中看到如下错误:

Exception KeyError: KeyError(27066240,) in <module 'threading' from 'C:\Program_Files\Python27\Lib\threading.pyc'> ignored

当我删除这两行时,我的应用程序就可以正常工作了。这是我在 Windows 机器上使用的软件包的列表。

django-erroneous - 0.1.0       - active
Django          - 1.3.1        - active
gevent          - 0.13.6       - active
greenlet        - 0.3.3        - active
lxml            - 2.3.3        - active
PIL             - 1.1.7        - active
pip             - 1.0.2        - active
setuptools      - 0.6c11       - active
South           - 0.7.3        - active
virtualenv      - 1.6.1        - active
yolk            - 0.4.1        - active

Django 和 Gevent 是否存在兼容性问题?我是不是在这里做错了什么。

仅供参考,我使用的是来自非官方 Python 存储库的预构建 Windows 二进制文件,这是一个开发环境。

【问题讨论】:

  • 你确定你没有使用 mod_wsgi?
  • 不,我正在使用默认的 Django 开发服务器和 runserver 命令。
  • 错误消息中提到的路径表明 Python 正在 Mac OS X 上运行?另外,如果您不修补线程(即monkey.patch_all(thread=False)),错误会消失吗?
  • 嗨,西蒙,我的错。该错误消息来自我复制并在剪贴板上的另一篇 SO 帖子。它看起来相同,但路径来自不同的平台。我已经放置了正确的异常消息。对此感到抱歉。
  • 如果我添加 thread=False 参数,我会收到以下错误 - NotImplementedError: gevent is only usable from a single thread

标签: python django gevent greenlets


【解决方案1】:

昨天已修复猴子模块中与patch_item 相关的错误。建议对固定版本进行任何进一步的测试。

如果没有帮助,您可以通过调用 patch_all 并将一些参数设置为 False 来缩小问题范围,然后找出对您来说有问题的模块。

def patch_all(socket=True, dns=True, time=True, select=True, thread=True, os=True, ssl=True, httplib=False, aggressive=True)

我最终建议测试更窄的第一个是monkey.patch_all(socket=False, select=False)。这使得“dns”和“aggressive”也未被使用。你可以专注于套接字并单独选择,最后,如果其他所有内容都可以安全启用,则可以使用“dns”和“aggressive”。

【讨论】:

  • @MridangAgarwalla:我看到的最近提到的有希望的修复是在 1.0 系列 bitbucket.org/denis/gevent 中。同一天发布了 0.13.7,但 0.13 系列的变更集看起来并不那么有希望。我读了一篇关于 gevent + django 的博客。讨论中的 Simimar 问题已通过升级解决。如果你的问题不一样,能否轻松复现?
  • @JustinPoliey:恐怕要完成满意需要您的反馈。 Django 可以使用 gevent。一个例子是这个博客codysoyland.com/2011/feb/6/…你能更具体一点吗?时间不多了。
猜你喜欢
  • 2018-10-13
  • 2012-06-14
  • 1970-01-01
  • 2011-06-20
  • 1970-01-01
  • 2023-02-22
  • 2012-05-27
  • 2014-03-22
  • 1970-01-01
相关资源
最近更新 更多