Celery Flower重启后进程数重置问题咨询
Flower重启后仪表盘进程数归零但任务数据保留的问题解决
问题背景
我使用以下命令启动Flower:
celery -A api.worker flower --persistent --db=rclc --max-tasks=10000 --log_file_prefix=C:\temp\flower.log
环境配置:Celery 5.2.7(dawn-chorus),Flower从1.2.0升级至2.0.1。
运行期间,「任务」标签页的记录与「仪表盘」标签页的进程数统计保持一致,但重启Flower后,「仪表盘」标签页的进程数统计归零,「任务」标签页的数据仍能正常显示正确值。请问这是默认行为吗?是否有办法让两者数据保持一致?
(附重启后截图:
- 任务页:

- 仪表盘:
)
这是Flower的默认行为,原因如下:
- 任务数据持久化:由于启用了
--persistent参数并指定了--db=rclc,Flower会将任务元数据(任务ID、状态、执行结果等)持久化到SQLite数据库(默认存储引擎),重启后从数据库加载历史任务数据,因此「任务」标签页的数据不会丢失。 - 仪表盘统计内存存储:仪表盘展示的进程数、worker任务处理计数等统计数据,默认保存在Flower运行内存中,不会持久化到数据库。重启Flower后,内存临时统计数据被清空,仪表盘会重新从Celery Broker拉取当前worker状态,历史统计无法恢复,因此出现归零情况。
让两者数据保持一致的解决方案:
- 自定义统计持久化插件
利用Flower的信号机制(如task_succeeded、worker_online等)编写自定义插件,定期将仪表盘统计数据写入rclc数据库,重启Flower时从数据库读取并恢复统计值。核心思路包括:监听任务执行事件累计计数、定期写入自定义数据库表、启动时加载历史统计初始化内存变量。 - 从Celery结果后端汇总统计
如果需要的是任务处理总计数,可直接从Celery结果后端(如Redis、SQLAlchemy)查询汇总历史任务数据,替代仪表盘默认的内存统计。可通过Flower API获取任务列表后自行计算,或自定义仪表盘展示模块。 - 用进程管理工具托管Flower
使用supervisord、systemd等工具托管Flower进程,避免手动重启导致统计数据丢失,这是最直接的临时规避方案。
内容的提问来源于stack exchange,提问作者Hannon qaoud
相关产品推荐
相关产品推荐

