Множество ошибок сокетов с задачами сельдерея - PullRequest
3 голосов
/ 20 июня 2011

Я получаю много исключений «IOError: Socket closed» из amqplib.client_0_8.method_framing.read_method при запуске моих рабочих из сельдерея с опцией --pool = eventlet. Я также вижу много исключений тайм-аута из eventlet.hubs.hub.switch.

Я использую скрипт async_manage.py, похожий на тот, что на https://gist.github.com/821848,, и работает так:

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

Это известная проблема или что-то не так с моей конфигурацией или настройкой?

Я использую djcelery 2.2.4, Django 1.3 и eventlet 0.9.15.

1 Ответ

5 голосов
/ 22 июня 2011

Проблема заключалась в побочном эффекте некоторого кода, который блокировал. Мне удалось обнаружить код блокировки, используя опцию eventlet, описанную в http://unethicalblogger.com/2010/08/28/unclog-the-tubes-blocking-detection-in-eventlet.html

Было 2 места, где происходило блокирование: поиск DNS и доступ к базе данных MySQL. Мне удалось решить первый, установив пакет dnspython, а второй - использовать недокументированный параметр MySQLdb в eventlet:

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