3

使用 --pool=eventlet 选项运行我的 celery worker 时,我从 amqplib.client_0_8.method_framing.read_method 收到很多“IOError:Socket closed”异常。我还看到来自 eventlet.hubs.hub.switch 的很多超时异常。

我正在使用类似于https://gist.github.com/821848上的 async_manage.py 脚本,运行的作品如下:

./async_manage.py celeryd_detach -E --pool=eventlet --concurrency=120 --logfile=<path>

这是一个已知问题,还是我的配置或设置有问题?

我正在运行 djcelery 2.2.4、Django 1.3 和 eventlet 0.9.15。

4

1 回答 1

6

问题是某些代码阻塞的副作用。我设法使用本文中描述的 eventlet 选项检测到阻塞代码。

有 2 个地方发生了阻塞:DNS 查找和 MySQL 数据库访问。我设法通过安装 dnspython 包解决了第一个问题,第二个我在 eventlet 中使用了未记录的 MySQLdb 选项:

import eventlet
eventlet.monkey_patch()
eventlet.monkey_patch(MySQLdb=True)
于 2011-06-22T11:43:50.523 回答