修补Python模块时Django中的Gevent异常

时间:2012-02-21 10:51:17

标签: python django gevent greenlets

我已经安装了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二进制文件,这是一个开发环境。

1 个答案:

答案 0 :(得分:2)

昨天修复了与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”和“激进”也未被使用。你可以专注于套接字并单独选择,最后,如果其他一切都可以安全启用,那就玩“dns”和“激进”。