您的位置:首页 > 其它

菜鸟搭建celery环境

2016-01-14 19:43 183 查看

前言

最近开始接触python,并且在业务需要的情况下开始寻找任务调度的框架。最后选择了celery,在这里记录一下搭建的过程。

服务器是debian系统。

官方文档:http://www.celeryproject.org/

github:https://github.com/celery/celery

安装环境

pip install celery
pip install flower #监控软件,包括图形界面
pip install supervisor #linux进程管理工具


这里我的broker使用的是redis,安装过程略

环境配置

redis配置

建立一个文件夹,在里面添加redis.conf(修改端口为8765)和start.sh

# start.sh
cd /opt/redis/8765/
/usr/bin/redis-server ./redis.conf


设置系统自启动

vi /etc/rc.local
/bin/bash /opt/redis/8765/start.sh #添加此行,系统自启动


supervisor配置

# 生成默认配置文件
echo_supervisord_conf > /etc/supervisord.conf
mkdir /etc/supervisord.conf.d
vi supervisord.conf # 具体内容可以参考官方的[例子](https://github.com/celery/celery/tree/master/extra/supervisord),
vi celery.conf # 同上


使用 supervisord -c supervisord.conf启动

关键操作

通过反复看官方文档,在这里记录下自己使用到的并测试了代码

# 创建一个应用
app = Celery('proj',
broker='redis://127.0.0.1:6379/0',
backend='redis://127.0.0.1:6379/0',
include=['proj.tasks'])


def my_on_failure(self, exc, task_id, args, kwargs, einfo):
pass

app.conf.update(
CELERY_TASK_RESULT_EXPIRES=30, # 结果保存时间
CELERY_TASK_SERIALIZER = 'json', # 格式序列化
CELERY_RESULT_SERIALIZER = 'json',
CELERY_TIMEZONE = 'Asia/Shanghai',
CELERY_ANNOTATIONS = {'*': {'on_failure': my_on_failure}} # 自定义错误处理,可参考地址:http://docs.celeryproject.org/en/latest/userguide/tasks.html#abstract-classes
)


# 定时任务
app.conf.CELERYBEAT_SCHEDULE = {
'add-every-1-min': {
'task': 'proj.tasks.add',
'schedule': timedelta(seconds=10),  # 可以使用小数
# 'schedule':crontab(minute=9,hour=18,day_of_month='*'), #支持crontab方式
'args': (16,16) # 传递参数
},
}
#具体可参考:http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html#crontab-schedules


#错误重试
# 参考地址:http://docs.celeryproject.org/en/latest/reference/celery.app.task.html#celery.app.task.Task.retry
@app.task(name='task.add',bind=True)
def add(self,x, y):
# print 0
try:
1/0
except Exception as exc:
raise self.retry(countdown=5,max_retries=6, exc=exc)
return x + y


Queue 我还没有用到,有时间再加进去

后续

这段时间准备尝试一下queue相关知识,所以搭建了rabbitmq,这里就简单记录一下过程好了

我很多操作都是参照这篇博客进行的/article/1989026.html

我的基础环境是debian,我的安装过程很简单

1,apt-get install erlang erlang-nox

2,下载 rabbit.deb,去官网找即可(http://www.rabbitmq.com/install-debian.html),到相应目录后使用 dpkg -i *.deb进行安装

3,参照http://celery.readthedocs.io/en/latest/userguide/routing.html进行修改

其他:

在使用的过程中主要需要注意两点

1,需要先 了解一下AMPQ的基本概念,然后参考http://www.rabbitmq.com/getstarted.html 进行一下操作,这样才能明白exchange,queue等参数的概念和意义

2,在部署的时候如果想改变默认端口,以及rabbitmq-management的默认端口,需要修改rabbitmq.conf(这个文件默认是没有的,需要自己创建),可以去https://github.com/rabbitmq/rabbitmq-server/blob/master/docs/rabbitmq.config.example下载一份,里面的参数基本就是json格式的,很好理解
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: