首页 > 代码库 > celery和supervisor配合使用,实现supervisor管理celery进程

celery和supervisor配合使用,实现supervisor管理celery进程

在这里我选择redis作为celery异步任务的中间人,系统选择CentOS6.5 64位。
redis、celery和supervisor的安装参见官方文档。

安装完毕后:

1, 创建celery的实例/home/user_00/learn/tasks.py文件

tasks.py:

# -*-coding:utf-8-*-
from celery import Celery, platforms

app = Celery(tasks, backend=redis://localhost:6379/1, broker=redis://localhost:6379/0)

# celery不能root用户启动解决(C_FORCE_ROOT environment),加上这一行即可
platforms.C_FORCE_ROOT = True

@app.task
def add(x, y):
    return x + y

2, 启动redis服务和celery职程服务器, 

redis-server
celery -A tasks worker --loglevel=info

在tasks.py文件同级目录下打开python shell:

In [1]: from tasks import add

In [2]: add.delay(4, 6)
Out[2]: <AsyncResult: 3e346dba-f8dc-4295-bc68-bba0bf9c1f94>

  In [10]: result.get()
  Out[10]: 10

同时可以看到celery服务的log输出:10, 这个时候关闭celery职程服务, 下一步将其加入到supervisor的进程管理器中

3, 安装好supoervisor之后, 生成supervisor配置文件

echo_supervisord_conf > /etc/supervisord.conf

用vim打开刚刚生成的配置文件supervisord.conf, 编辑最后两行改为:

[include]
files = sv.ini

这时候创建/etc/sv.ini文件:

touch /etc/sv.ini

编辑sv.ini文件, 写入以下内容:

[program:celery]
command=celery -A tasks worker --loglevel=info
directory=/home/user_00/learn
stdout_logfile=/home/user_00/learn/logs/celery.log
autorestart=true
redirect_stderr=true

 同时创建/home/user_00/learn/logs/celery.log

这个时候名为celery的进程就配置好了

4.变更配置文件之后,要加载最新的配置文件:

supervisorctl update

启动supervisor服务:

supervisord

进入supervisor管理界面:

supervisorctl

启动celery进程:

start celery

5.这个时候测试一下

进入/home/user_00/learn/logs目录下,监控celery.log

tail -f *

在tasks.py文件同级目录下打开python shell:

In [1]: from tasks import add

In [2]: add.delay(4, 6)
Out[2]: <AsyncResult: 3e346dba-f8dc-4295-bc68-bba0bf9c1f94>

  In [10]: result.get()
  Out[10]: 10

可以在监控的log信息中看到输出结果:10

这个时候就完成了这个用supervisor管理celery进程的实例.

celery和supervisor配合使用,实现supervisor管理celery进程