当使用--pool = eventlet选项运行我的芹菜工作者时,我从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。
答案 0 :(得分:5)
问题是一些阻止的代码的副作用。我设法使用http://unethicalblogger.com/2010/08/28/unclog-the-tubes-blocking-detection-in-eventlet.html
中描述的eventlet选项检测阻止代码有两个地方发生阻塞:DNS查找和MySQL数据库访问。我设法解决了第一个安装dnspython包,第二个我在eventlet中使用了未记录的MySQLdb选项:
import eventlet
eventlet.monkey_patch()
eventlet.monkey_patch(MySQLdb=True)