У меня Django настроен под Windows (Win2008 Server R2, IIS 7.5, MS SQL). Я пытаюсь реализовать сельдерей 2.4.1 (с RabbitMQ) для обработки задач и столкнулся с очень неприятной проблемой.
Я начинаю celeryd с рекомендуемого:
manage.py celeryd --settings=settings
и все работает нормально. Затем в моем проекте django я запускаю задачу для запуска (для тестирования я просто использую простой пример «add»:
@task
def add(x, y):
return x + y
и это называется в моем views.py как:
tasks.add.delay(1,2)
Когда Celeryd поднимает это, происходит пара вещей, иногда :
1) Я получаю диалоговое окно Windows, «python.exe перестал работать», и возможность закрыть его.
2) После закрытия этого в cmd, где работает celeryd, я получаю:
[date-time: ERROR/MainProcess] Task [taskUUID] raised exception: WorkerLostError('Worker exited prematurely.',)
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\celery\concurrency\processes\pool.py", line 610, in _join_exited_workers
raise WorkerLostError("Worker exited prematurely.")
WorkerLostError: Worker exited prematurely.
Я очень утомительно пытался поработать со всеми настройками сельдерея, по одному, которые могли бы повлиять на работников (CELERYD_CONCURRENCY, CELERYD_PREFETCH_MULTIPLIER, CELERYD_MAX_TASKS_PER_CHILD и т. Д.), Не оказывая никакого влияния на это.
Что действительно странно, так это то, что иногда, после того, как это произошло (и я просто оставляю Celeryd запущенным ... он не убивает этот процесс ...?), Я могу снова запустить задачу, без сбоев python.exe и задача будет успешно выполнена.
Мои настройки, относящиеся к сельдерею, из settings.py:
BROKER_HOST = "localhost"
BROKER_PORT = 5672
BROKER_USER = "guest"
BROKER_PASSWORD = "guest"
BROKER_VHOST = "/"
CELERY_IMPORTS = ("myproject.tasks",)
CELERY_RESULT_BACKEND = "database"
CELERY_SEND_EVENTS=True #same as '-E' option from cmd
Я сильно подозреваю ошибку сельдерея (возможно, специфичную для реализации Windows?), Но у меня пока нет возможностей для ее идентификации или предложения по исправлению.