Исключения Gevent в Django при исправлении модулей Python - PullRequest
3 голосов
/ 21 февраля 2012

Я установил библиотеки gevent и greenlet и в файле __init__.py моего приложения Djano я поместил следующие две строки:

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?Я что-то здесь не так делаю.

К вашему сведению, я использую встроенные двоичные файлы Windows из неофициального репозитория Python, и это среда разработки.

1 Ответ

2 голосов
/ 13 апреля 2012

Вчера была исправлена ​​ошибка в модуле обезьяны, связанная с 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). Это делает «днс» и «агрессивный» также неиспользованными. Чем вы можете сосредоточиться на сокете и выбрать отдельно и, наконец, если все остальное можно безопасно включить, на игре с «днс» и «агрессивным».

...