在这里我选择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进程的实例.