使用文件系统作为代理时,Celery worker 创建“control”文件夹
我有一个项目,使用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工作进程,但这样工作进程就收不到任何任务。
在运行Celery工作进程时提供
--workdir
参数,但这似乎导致Celery工作进程和Celery应用之间的路径不一致,因此失败了。
1 个回答
1
设置一个 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",
}