Celery以文件系统为Broker时生成control文件夹的迁移问题
Celery文件系统Broker下control文件夹的迁移方案
我用Celery+Redis做任务管理的项目,本地开发想换成文件系统当Broker替代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)
已尝试的方法:
- 从非根目录启动Celery Worker,Worker无法接收任务
- 启动Worker时添加
--workdir参数,导致Worker与Celery App路径不一致,启动失败
解决办法
这个control文件夹是文件系统Broker用来存储内部交换队列元数据的,包含Celery内部通信队列(pidbox)和各任务队列的交换配置信息。要修改它的存储位置,只需在broker_transport_options中新增control_folder参数,指定目标路径即可。
修改后的配置:
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", "control_folder": ".celery/broker/control", # 指定control文件夹的新位置 "queue_order_strategy": "sorted" } celery_app = Celery(__name__) celery_app.config_from_object(CeleryLocalConfig)
说明
- 添加
control_folder参数后,原根目录的control文件夹不再生成,所有相关元数据文件会自动存储到指定的.celery/broker/control目录下 - 无需手动创建目标目录,Celery会自动生成不存在的路径
内容的提问来源于stack exchange,提问作者krzysiek0011
相关产品推荐
相关产品推荐

