Celery 是一个基于分布式消息传递的高效、强大的异步任务队列/作业队列。此文档旨在指导您如何为异步任务和定时任务设置 Celery。
关键组件
-A app_name
: 指定 Celery 应用的位置。这是必须的参数,指明 Celery 的入口点,通常是包含 Celery 实例的 Python 脚本名称。-c
: 设置工作进程同时并发执行的任务数量。例如:-c 4
允许工作进程同时执行四个任务。-l
: 设置日志级别。有效的日志级别包括:DEBUG
、INFO
、WARNING
、ERROR
和 CRITICAL
。例如:-l INFO
将日志级别设置为信息级。-P
: 指定 worker 的执行池类型:
如果安装了eventlet 可使用-P指定
bashcelery -A celery_tasks worker -l info -P eventlet
bashcelery -A celery_tasks beat -l info
bashcelery -A celery_tasks worker --beat -l info
注意
由于默认的 prefork
方法在 Windows 上可能存在兼容性问题,建议 Windows 用户使用 eventlet
执行池。
bashpip install eventlet
这里 -A proj
是你的 Celery 应用的名称,-l info
是日志级别。& 符号
将命令放到后台运行。
nohup 会将输出重定向到 nohup.out 文件中,除非你指定了其他输出文件。
shellnohup celery -A proj worker -l info &
检测运行情况
shellps -ef|grep celery
创建一个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运行
bashsupervisord -c /xxx/supervisord.conf
重启 更新代码与配置文件
bashsupervisorctl reread supervisorctl update supervisorctl restart celery
注意 reload 命令则会重新启动 Supervisor 本身,使得所有的配置更改都被完全应用,并且所有管理的程序都会根据新的配置重启。 这个命令比较"重",因为它会影响到所有通过 Supervisor 管理的程序。
本文作者:Freed
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!