2011-06-20 30 views
3

当使用--pool = eventlet选项运行我的芹菜工时,我收到了很多来自amqplib.client_0_8.method_framing.read_method的“IOError:Socket closed”异常。我也从eventlet.hubs.hub.switch中看到很多超时异常。芹菜eventlet任务有很多套接字错误

我使用一个类似于在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。

+1

你确定你的任务不会阻塞呼叫吗? – asksol

+0

我是猴子修补每一个,但我不是100%肯定,没有任何阻碍。找出答案的最佳方式是什么,如果是的话我该怎么办? –

+0

猴子修补只修补了什么事件小程序知道如何修补,因此您仍然可以使用那些未涵盖的库。看到这里例如:http://unethicalblogger.com/2010/08/28/unclog-the-tubes-blocking-detection-in-eventlet.html – asksol

回答

5

这个问题是一些阻塞的代码的副作用。我设法使用http://unethicalblogger.com/2010/08/28/unclog-the-tubes-blocking-detection-in-eventlet.html

中描述的eventlet选项来检测阻止代码。有2个地方发生了阻塞:DNS查找和MySQL数据库访问。我设法通过安装dnspython包来解决第一个问题,第二个解决方案是使用eventlet中未公开的MySQLdb选项:

import eventlet 
eventlet.monkey_patch() 
eventlet.monkey_patch(MySQLdb=True)