Celery: Невозможно запускать задачи под Windows

Созданный на 8 июн. 2017  ·  13Комментарии  ·  Источник: celery/celery

Celery 4.x запускается (с исправлениями # 4078), но все задачи вылетают

Действия по воспроизведению

Воспользуйтесь учебником « Первые шаги» (http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html)

сельдерей -A tasks worker --loglevel = info
доп. задержка (2,2)

Ожидаемое поведение

Задача выполнена и выдается результат 4

Фактическое поведение

Celery тормозит.

"C: \ Program Files \ Python36 \ Scripts \ celery.exe" -A perse.celery worker -l info

-------------- сельдерей @ PETRUS v4.0.2 (скрытый вызов)


--- * * * - Windows-10-10.0.14393-SP0 2017-06-08 15:31:22


  • ** ---------- [конфигурация]
  • ** ----------.> приложение: perse: 0x24eecc088d0
  • * ----------.> транспорт: amqp: // гость : * @ localhost: 5672 //
  • ** ----------.> результаты: rpc: //
  • * --- * ---.> параллелизм: 12 (предварительная вилка)- * ** ----.> события задачи: ВЫКЛ (включите -E для отслеживания задач в этом воркере)

-------------- [очереди]
.> обмен сельдерея = сельдерей (прямой) ключ = сельдерей

[задачи]
. perse.tasks.celery_add

[2017-06-08 15: 31: 22,685: INFO / MainProcess] Подключено к amqp: // guest : *@127.0.0.1: 5672 //[2017-06-08 15: 31: 22,703: INFO / MainProcess] mingle: поиск соседей[2017-06-08 15: 31: 23,202: INFO / SpawnPoolWorker-5] дочерний процесс 5124 вызывает self.run ()[2017-06-08 15: 31: 23,207: INFO / SpawnPoolWorker-4] дочерний процесс 10848 вызывает self.run ()[2017-06-08 15: 31: 23,208: INFO / SpawnPoolWorker-10] дочерний процесс 5296 вызывает self.run ()[2017-06-08 15: 31: 23,214: INFO / SpawnPoolWorker-1] дочерний процесс 5752 вызывает self.run ()[2017-06-08 15: 31: 23,218: INFO / SpawnPoolWorker-3] дочерний процесс 11868 вызывает self.run ()[2017-06-08 15: 31: 23,226: INFO / SpawnPoolWorker-11] дочерний процесс 9544 вызывает self.run ()[2017-06-08 15: 31: 23,227: INFO / SpawnPoolWorker-6] дочерний процесс 16332 вызывает self.run ()[2017-06-08 15: 31: 23,229: INFO / SpawnPoolWorker-8] дочерний процесс 3384 вызывает self.run ()[2017-06-08 15: 31: 23,234: INFO / SpawnPoolWorker-12] дочерний процесс 8020 вызывает self.run ()[2017-06-08 15: 31: 23,241: INFO / SpawnPoolWorker-9] дочерний процесс 15612 вызывает self.run ()[2017-06-08 15: 31: 23,243: INFO / SpawnPoolWorker-7] дочерний процесс 9896 вызывает self.run ()[2017-06-08 15: 31: 23,245: INFO / SpawnPoolWorker-2] дочерний процесс 260, вызывающий self.run ()[2017-06-08 15: 31: 23,730: INFO / MainProcess] mingle: all alone[2017-06-08 15: 31: 23,747: INFO / MainProcess] celery @ PETRUS готов.[2017-06-08 15: 31: 49,412: INFO / MainProcess] Полученная задача: perse.tasks.celery_add [524d788e-e024-493d-9ed9-4b009315fea3][2017-06-08 15:31: 49,416: ERROR / MainProcess] Обработчик задачи вызвал ошибку: ValueError ('недостаточно значений для распаковки (ожидается 3, получено 0)',)Отслеживание (последний вызов последний):Файл "c: \ program files \ python36 \ lib \ site-packages \ billiard \ pool.py", строка 359, в рабочем циклерезультат = (Верно, prepare_result (fun ( args, ** kwargs)))
Файл "c: \ program files \ python36 \ lib \ site-packages \ celery \ app \ trace.py", строка 518, в _fast_trace_task
задачи, принять, hostname = _loc
ValueError: недостаточно значений для распаковки (ожидалось 3, получено 0)

Исправить

См. Запрос на вытягивание №4078.

Documentation Windows Not a Bug

Самый полезный комментарий

Я должен подтвердить: эта ошибка появляется на

Celery 4.1.0
Windows 10 Enterprise 64 bit

при выполнении команды celery -A <mymodule> worker -l info

и работает следующее обходное решение:

pip install eventlet
celery -A <mymodule> worker -l info -P eventlet

Все 13 Комментарий

FWIW Я работал над этим, используя реализацию пула событий (параметр командной строки "-P eventlet").

Решение @drewdogg следует упомянуть в руководстве.

Я должен подтвердить: эта ошибка появляется на

Celery 4.1.0
Windows 10 Enterprise 64 bit

при выполнении команды celery -A <mymodule> worker -l info

и работает следующее обходное решение:

pip install eventlet
celery -A <mymodule> worker -l info -P eventlet

достаточно определить переменную среды FORKED_BY_MULTIPROCESSING = 1 для рабочего экземпляра.

@auvipy Работайте у меня, спасибо.

@auvipy это действительно решает проблему :) 👍
Добавлять:
импорт ОС
os.environ.setdefault ('FORKED_BY_MULTIPROCESSING', '1')
перед определением экземпляра Celery достаточно

может быть, это следует упомянуть в документации? @wonderfulsuccess хотите отправить запрос на

@wonderfulsuccess

Спасибо

@auvipy это действительно решает проблему
Добавлять:
импорт ОС
os.environ.setdefault ('FORKED_BY_MULTIPROCESSING', '1')
перед определением экземпляра Celery достаточно

Спасибо, сработало!

@auvipy, если это только одна строка кода, которую нужно исправить, то почему бы просто не исправить ее в сельдерее, вместо того, чтобы использовать документацию, чтобы рекомендовать пользователям реализовать обходной путь? Почему ошибка, полностью нарушающая платформу, с таким простым исправлением все еще остается проблемой спустя почти 2 года?

куда вы хотите сельдерей положить этот мог? Я считаю, что это хорошо подходит для конкретных инструкций Windows. если вы хотите исправить это на уровне кода, приходите с соответствующим PR.

@auvipy это действительно решает проблему :) 👍
Добавлять:
импорт ОС
os.environ.setdefault ('FORKED_BY_MULTIPROCESSING', '1')
перед определением экземпляра Celery достаточно

Вы классные, спасибо большое!

@auvipy Я искал ответ на эту проблему, я потратил много времени, пытаясь исправить это, большое вам спасибо

Была ли эта страница полезной?
0 / 5 - 0 рейтинги