如何在gevent和django-celery中使用pymysql?

1 投票
1 回答
1040 浏览
提问于 2025-04-18 00:17

我在我的 manage.py 文件里加了以下内容(使用的是 django-celery 3.0.21):

import eventlet
pymysql = eventlet.import_patched('pymysql')
pymysql.install_as_MySQLdb()

但是当我尝试启动 django 或 celery 时,出现了以下错误:

Traceback (most recent call last):
  File "manage.py", line 8, in <module>
    pymysql.install_as_MySQLdb()
  File "/home/ubuntu/.virtualenvs/myenv/lib/python2.6/site-packages/pymysql/__init__.py", line 115, in install_as_MySQLdb
    sys.modules["MySQLdb"] = sys.modules["_mysql"] = sys.modules["pymysql"]
KeyError: 'pymysql'

简单来说,我真的想用 celery 和 eventlet 一起工作,但我需要一个可以“绿色化”的 Python MySQL 库来实现这个目标。

1 个回答

1

谢谢你,这看起来像是eventlet.import_patched()里的一个错误,我在问题追踪器上开了一个问题[1]。

你可以使用下面的代码:

import eventlet
eventlet.monkey_patch()
# everything below is patched to be green

import pymysql
pymysql.install_as_MySQLdb()

[1] 相关的Eventlet问题 https://github.com/eventlet/eventlet/issues/81

撰写回答