我有一个使用 Celery 和 Redis 后端来管理任务的项目。对于本地开发,我尝试使用文件系统设置 Celery 作为代理而不是 Redis。但是,当我运行 Celery Worker 时,它会在根目录中创建
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)
到目前为止我已经尝试过:
从与 root 不同的目录运行 Celery 工作程序,但工作程序不会收到任何任务。
在运行 Celery Worker 时提供
--workdir
参数,但它似乎在 Celery Worker 和 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",
}