У меня есть проект, использующий Celery с бэкэндом Redis для управления задачами. Для локальной разработки я пытаюсь настроить Celery с файловой системой в качестве брокера вместо Redis. Однако, когда я запускаю работника Celery, он создает папку control в корневом каталоге со следующим содержимым:
/control
├── celery.pidbox.exchange
├── Q1.exchange
├── Q2.exchange
├── ...
Мне трудно найти какие-либо ресурсы о том, что это такое и для чего именно оно используется. Моя цель — переместить эту папку в другое место (например, папку .celery/), чтобы она не находилась в корневом каталоге.
Вот моя конфигурация Celery:
class CeleryLocalConfig:
include = ["app.tasks"]
broker_url = "filesystem://"
result_backend = "file://.celery/broker/results"
broker_transport_options = {
"data_folder_in": ".celery/broker/out",
"data_folder_out": ".celery/broker/out",
"queue_order_strategy": "sorted"
}
celery_app = Celery(__name__)
celery_app.config_from_object(CeleryLocalConfig)
До сих пор я пробовал:
Запуск рабочего Celery из каталога, отличного от корневого, но рабочий не получает никаких задач.
Предоставление параметра --workdir при запуске рабочего Celery, но, похоже, он создает разные пути между рабочим Celery и приложением Celery и, следовательно, не работает.






Установка поля control_folder помогла мне:
CELERY_BROKER_TRANSPORT_OPTIONS = {
"data_folder_in": os.path.join(BASE_DIR, ".celery"),
"data_folder_out": os.path.join(BASE_DIR, ".celery"),
"control_folder": os.path.join(BASE_DIR, ".celery"),
}
Итак, для вас, я полагаю, это будет:
broker_transport_options = {
"data_folder_in": ".celery/broker/out",
"data_folder_out": ".celery/broker/out",
"queue_order_strategy": "sorted",
"control_folder": ".celery/broker/out",
}