☰
Flower 安装与快速上手:Celery 分布式任务队列的实时监控工具
2026/9/29 2:34:27 网站建设 项目流程
  • 可观测性
  • 运维
  • 后端

【免费下载链接】flower

Real-time monitor and web admin for Celery distributed task queue

项目地址:https://gitcode.com/gh_mirrors/fl/flower
点击查看免费下载

Flower 是 Celery 生态中用于实时监控与 Web 管理的开源工具。本指南围绕仓库中的 docs/install.rst 展开,介绍 Flower 的 pip 安装、开发版安装,以及通过celery flower子命令、Docker 镜像两种方式启动监控服务的完整流程。读者读完可独立完成 Flower 的部署,并掌握端口修改、Celery 应用加载、Broker 连接等核心启动参数的用法。

安装 Flower

使用 pip 安装稳定版

Flower 以标准 Python 包的形式发布在 PyPI 上,安装非常简单:

$ pip install flower

Flower 支持 Python 3.7 及以上版本(见 setup.py 中的python_requires=">=3.7"),其运行依赖如下(见 requirements/default.txt):

  • celery>=5.0.5:Flower 作为 Celery 的子命令运行,依赖 Celery 提供的应用对象、事件系统与远程控制接口;
  • tornado>=5.0.0,<7.0.0:Flower 的 HTTP 服务器基于 Tornado 异步框架实现;
  • prometheus_client>=0.8.0:用于对外暴露 Prometheus 监控指标;
  • humanize、pytz:用于时间的人性化显示与时区处理。

安装完成后,Flower 会通过setup.py中声明的entry_points(celery.commands→flower.command:flower)自动注册为 Celery 的一个子命令,这也是下文所有celery ... flower命令能够生效的底层机制。

安装开发版

如果需要体验最新功能或参与开发,可以直接从 GitHub 主分支安装:

$ pip install https://github.com/mher/flower/zipball/master#egg=flower

该命令会将 master 分支的最新代码打包安装,适合在正式发布前尝鲜或复现最新问题。

启动 Flower

Flower 不能单独运行,它必须绑定到一个 Celery 应用,因此启动命令统一采用celery ... flower的形式。其入口实现在 flower/main.py,核心逻辑位于 flower/command.py。

方式一:通过 broker URL 直接启动

最简单的启动方式是指定 broker 地址,Flower 会自动据此创建 Celery 应用:

$ celery --broker=amqp://guest:guest@localhost:5672// flower

其中amqp://guest:guest@localhost:5672//是 RabbitMQ 的默认连接 URL。除了 RabbitMQ,Celery 支持的任意 broker(如redis://localhost:6379/0)都可以这样直接传入。

方式二:复用已配置的 Celery 应用

在实际项目中,Celery 应用通常已经在一个 Python 模块中完成配置(包括 broker、backend、序列化策略、路由规则等)。此时更推荐让 Flower 直接加载该应用:

$ celery -A tasks.app flower

-A tasks.app指示 Celery 加载tasks模块中的app实例。仓库的 examples/tasks.py 提供了一个可直接运行的示例应用:

import os from celery import Celery app = Celery("tasks", broker=os.environ.get('CELERY_BROKER_URL', 'redis://'), backend=os.environ.get('CELERY_RESULT_BACKEND', 'redis')) app.conf.accept_content = ['pickle', 'json', 'msgpack', 'yaml'] app.conf.worker_send_task_events = True

该应用定义了add、sleep、echo、error四个任务,并开启了worker_send_task_events——这保证 worker 会向事件流发送任务事件,是 Flower 实时展示任务进度与历史的前提。

启动时注意:Celery 参数(如--broker、-A)必须放在celery命令之后、flower子命令之前;Flower 自身的参数放在flower之后。flower/command.py 中的warn_about_celery_args_used_in_flower_command会检测你把 Celery 参数误放在flower之后的情况,并给出修正提示。

修改监听端口

默认情况下 Flower 运行在 5555 端口(该默认值定义于 flower/options.py 的define("port", default=5555, ...),与 Dockerfile 中的EXPOSE 5555一致)。通过--port选项即可修改:

$ celery -A tasks.app flower --port=5001

启动成功后,日志会打印形如Visit me at http://0.0.0.0:5555的访问地址(见 flower/command.py 的print_banner),同时会列出当前 Broker 连接 URI 与所有已注册任务。

使用 Docker 运行 Flower

仓库提供现成的 Docker 镜像与编排配置,适合快速拉起一整套演示环境。

直接使用官方镜像

$ docker run -v examples:/data -p 5555:5555 mher/flower celery --app=tasks.app flower

该命令的含义:

  • -v examples:/data:将本地的examples目录挂载到容器的/data(容器内PYTHONPATH即指向/data,见 Dockerfile),使容器中的 Python 能导入 examples/tasks.py;
  • -p 5555:5555:将容器的 5555 端口映射到宿主机,供浏览器访问;
  • celery --app=tasks.app flower:即上文介绍的标准启动命令,加载容器内tasks.app。

使用 docker-compose 一键拉起完整环境

仓库根目录的 docker-compose.yml 定义了一套完整的 Celery + Flower 演示环境,包含redis(Broker)、worker(运行celery -A tasks worker -l info -E)、flower(运行celery -A tasks flower)以及可选的prometheus/grafana监控组件:

$ docker-compose up

其中flower服务通过CELERY_BROKER_URL: redis://redis连接同一网络内的 Redis,并通过depends_on保证 worker 先于 Flower 启动。访问http://localhost:5555即可看到 Worker 与任务列表。

常见启动配置一览

除--port外,Flower 在 flower/options.py 中还注册了大量可通过命令行传入的启动参数,以下是启动阶段最常用的几个(完整说明见 docs/config.rst):

参数默认值说明
--address''(全部网卡)指定 HTTP 服务监听地址,如--address=0.0.0.0或--address=localhost
--unix-socket''改用 UNIX socket 监听,如--unix-socket=/var/run/flower.sock,此时不再占用 TCP 端口
--confflowerconfig.py指定额外配置文件路径,如--conf="./examples/celeryconfig.py"
--debugFalse开启调试模式,输出更详细的日志(注意可能打印敏感信息)
--inspect_timeout1000worker 远程检查命令的超时时间,单位毫秒
--enable_eventsTrue周期性向 worker 发送 Celeryenable_events命令以接收实时任务事件
--max_workers/--max_tasks5000/100000内存中保留的 worker / 任务数量上限
--persistentFalse开启持久化模式,配合--db指定状态数据库文件,重启后恢复状态
--read_onlyFalse只读模式,禁用 UI 与 API 中所有控制操作

这些参数除了命令行,还可以写入flowerconfig.py配置文件,或通过FLOWER_前缀的环境变量(如export FLOWER_BASIC_AUTH=foo:bar)传入。flower/command.py 的apply_env_options、apply_options分别负责解析这两类来源,且命令行参数的优先级最高,会覆盖配置文件的同名设置。

源码视角:启动链路是如何工作的

理解 Flower 的启动链路有助于排查部署问题。以celery -A tasks.app flower --port=5001为例,完整流程如下:

  1. Celery CLI 通过 setup.py 声明的entry_points找到flower.command:flower,将剩余参数(--port=5001)以tornado_argv形式传入;
  2. flower/command.py 的flower()依次调用apply_env_options()(解析FLOWER_*环境变量)与apply_options()(先解析命令行拿到--conf,再解析配置文件,最后再次解析命令行确保命令行参数优先);
  3. extract_settings()汇总调试开关、cookie 密钥、URL 前缀、OAuth 配置与 SSL 证书等设置;
  4. 构造 flower/app.py 中的Flower应用对象,内部创建Events(消费 Celery 事件流)与Inspector(执行 worker 远程检查);
  5. flower_app.start()启动事件循环,监听--port指定的端口并开启服务。

其中Events的初始化会读取db、persistent、state_save_interval、enable_events、max_workers、max_tasks等参数,这就是上述“常见启动配置”中相关参数影响行为的地方。相应启动流程在 tests/unit/test_command.py 中有配套单测,例如test_port验证--port=123会被正确解析并写入options.port,可作为参数解析行为的参考依据。

总结

本文覆盖了 Flower 从安装到启动的完整路径:pip install flower安装稳定版(或从 master 安装开发版);通过celery --broker=... flower或celery -A tasks.app flower两种方式启动;用--port调整监听端口;用 Docker 镜像或 docker-compose.yml 快速部署整套环境。结合 flower/options.py、flower/command.py 与 flower/app.py 的源码,可以清楚理解参数解析与端口绑定的底层实现。更多进阶配置(认证、持久化、Prometheus 集成等)可继续阅读仓库的 docs/config.rst 与 docs/prometheus-integration.rst。

  • 可观测性
  • 运维
  • 后端

【免费下载链接】flower

Real-time monitor and web admin for Celery distributed task queue

项目地址:https://gitcode.com/gh_mirrors/fl/flower
点击查看免费下载
上一篇:3行代码搞定!Datasets极速数据原型开发完全指南
下一篇:swagger-codegen 生成 Sinatra 服务器代码:模板驱动引擎与 Swaggering 运行时实战解析

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询