编辑
2024-12-19
celery
00
请注意,本文编写于 34 天前,最后修改于 33 天前,其中某些信息可能已经过时。

目录

配置选项
启动 worker:
启动 beat(调度器):
同时启动 worker 和 beat:
后台运行方式 nohup
后台运行方式 supervisor

Celery 是一个基于分布式消息传递的高效、强大的异步任务队列/作业队列。此文档旨在指导您如何为异步任务和定时任务设置 Celery。

关键组件

  • Worker(工作者):表示执行任务的工作进程。
  • Beat(调度器):安排周期性任务的执行。

配置选项

  • -A app_name: 指定 Celery 应用的位置。这是必须的参数,指明 Celery 的入口点,通常是包含 Celery 实例的 Python 脚本名称。
  • -c: 设置工作进程同时并发执行的任务数量。例如:-c 4 允许工作进程同时执行四个任务。
  • -l: 设置日志级别。有效的日志级别包括:DEBUGINFOWARNINGERRORCRITICAL。例如:-l INFO 将日志级别设置为信息级。
  • -P: 指定 worker 的执行池类型:
    • prefork:默认选项,使用预先生成的进程池来执行任务,适合 CPU 密集型任务。
    • eventletgevent:使用 greenlet 实现协程,适用于 I/O 密集型任务。
    • solo:在主进程内串行执行任务,主要用于调试。

启动 worker:

如果安装了eventlet 可使用-P指定

bash
celery -A celery_tasks worker -l info -P eventlet

启动 beat(调度器):

bash
celery -A celery_tasks beat -l info

同时启动 worker 和 beat:

bash
celery -A celery_tasks worker --beat -l info

注意 由于默认的 prefork 方法在 Windows 上可能存在兼容性问题,建议 Windows 用户使用 eventlet 执行池。

bash
pip install eventlet

后台运行方式 nohup

这里 -A proj 是你的 Celery 应用的名称,-l info 是日志级别。& 符号将命令放到后台运行。 nohup 会将输出重定向到 nohup.out 文件中,除非你指定了其他输出文件。

shell
nohup celery -A proj worker -l info &

检测运行情况

shell
ps -ef|grep celery

后台运行方式 supervisor

创建一个supervisord.conf文件,简单配置一下项目路径,日志输出

/xxx代表项目路径

bash
[supervisord] nodaemon=false logfile=/xxx/logs/supervisord.log pidfile=/xxx/supervisord.pid logfile_maxbytes=50MB logfile_backups=10 [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl=unix:///xxx/supervisor.sock [unix_http_server] file=/xxx/supervisor.sock ; UNIX socket 文件用来通信 [program:celery] command=celery -A celery_tasks worker -l info -c 2 directory=/xxx autostart=true autorestart=true stdout_logfile=/xxx/logs/celery.log stderr_logfile=/xxx/celery_err.log

构建supervisord运行

bash
supervisord -c /xxx/supervisord.conf

重启 更新代码与配置文件

bash
supervisorctl reread supervisorctl update supervisorctl restart celery

注意 reload 命令则会重新启动 Supervisor 本身,使得所有的配置更改都被完全应用,并且所有管理的程序都会根据新的配置重启。 这个命令比较"重",因为它会影响到所有通过 Supervisor 管理的程序。

本文作者:Freed

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!