安装使用celery异步任务

安装使用celery异步任务

1. 关于celery

Celery是基于Python开发的一个分布式任务队列框架,支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度。
这里写图片描述
celery用典型的生产者-消费者模式,主要由三部分组成:broker(消息队列)、workers(消费者:处理任务)、backend(存储结果)。实际应用中,用户从Web前端发起一个请求,我们只需要将请求所要处理的任务丢入任务队列broker中,由空闲的worker去处理任务即可,处理的结果会暂存在后台数据库backend中。我们可以在一台机器或多台机器上同时起多个worker进程来实现分布式地并行处理任务。

2. 安装celery

sudo pip install celery

sudo pip install djcelery
vagrant@precise64
sudo
pip freeze | grep celery
celery==3.1.25
django-celery==3.2.1

今天(2018-04-23)通过以上两条命令在env中再次安装,发现安装到env之外的环境去了;
还是先下载了celery和djcelery的两个安装包,通过指定python的方法安装了;
如下:

(env27)wfq@ubuntu:~/soft/celery/celery-3.1.25$ pwd
/home/wfq/soft/celery/celery-3.1.25
(env27)wfq@ubuntu:~/soft/celery/celery-3.1.25$ sudo ~/python27/bin/python setup.py install
(env27)wfq@ubuntu:~/soft/celery/django-celery-3.2.2$ pwd
/home/wfq/soft/celery/django-celery-3.2.2
(env27)wfq@ubuntu:~/soft/celery/django-celery-3.2.2$ sudo ~/python27/bin/python setup.py install
(env27)wfq@ubuntu:~/soft/celery/django-celery-3.2.2$ pip freeze | grep celery
celery==3.1.25
django-celery==3.2.2

3. 安装redis作为消息队列

下载地址:http://redis.io/download,下载最新文档版本。
下载完后解压,进入加压后的目录执行make命令

vagrant@precise64:~/redis$ ls 
redis-4.0.0  redis-4.0.0.tar.gz
vagrant@precise64:~/redis$ cd redis-4.0.0/
vagrant@precise64:~/redis/redis-4.0.0$ make

make完后 redis-4.0.0目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli,两个程序位于安装目录 src 目录下:

启动redis服务.

vagrant@precise64:~/redis/redis-4.0.0/src$ pwd
/home/vagrant/redis/redis-4.0.0/src
vagrant@precise64:~/redis/redis-4.0.0/src$ ./redis-server &
vagrant@precise64:~/redis/redis-4.0.0/src$ ps -ef | grep redis
vagrant   6614  6433  0 03:02 pts/3    00:00:00 ./redis-server *:6379
vagrant   6619  6433  0 03:02 pts/3    00:00:00 grep --color=auto redis

关闭redis服务

./redis-cli -p 6379 shutdown

查看安装版本

vagrant@precise64:~/redis/redis-4.0.0/src$ ./redis-server -v
Redis server v=4.0.0 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=d230e17d85eb69a9
vagrant@precise64:~/redis/redis-4.0.0/src$ 
vagrant@precise64:~/redis/redis-4.0.0/src$ 
vagrant@precise64:~/redis/redis-4.0.0/src$ ./redis-server --version
Redis server v=4.0.0 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=d230e17d85eb69a9

4. 配置settings.py

首先,在Django工程的settings.py文件中加入如下配置代码:

import djcelery
djcelery.setup_loader()
BROKER_URL = 'redis://127.0.0.1:6379/0'
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/0'

其中,当djcelery.setup_loader()运行时,Celery便会去查看INSTALLD_APPS下包含的所有app目录中的tasks.py文件,找到标记为task的方法,将它们注册为celery task。BROKER_URL和CELERY_RESULT_BACKEND分别指代Broker的代理地址以及Backend(result store)数据存储地址。在Django中如果没有设置backend,会使用其默认的后台数据库用来存储数据。注意,此处backend的设置是通过关键字CELERY_RESULT_BACKEND来配置
然后,在INSTALLED_APPS中加入djcelery:

INSTALLED_APPS = (
    'djcelery',
)

5. 在使用该任务队列的app根目录下,建立tasks.py

这里写图片描述

# -*- coding: utf-8 -*-
import time
from celery import Celery
from celery import task

@task
def test_add(x, y):
    time.sleep(10)
    print '===================' + str(x + y)
    return x + y

在tasks.py中我们就可以编码实现我们需要执行的任务逻辑,在开始处import task,然后在要执行的任务方法开头用上装饰器@task。需要注意的是,与一般的.py中实现celery不同,tasks.py必须建在各app的根目录下,且不能随意命名。

6. 生产任务

在需要执行该任务的View中,通过test_add.delay的方式来创建任务,并送入消息队列。比如:

def test(request):
    from ops.tasks import test_add
    test_add.delay(1, 2)
    ...

7. 启动worker的命令

python manage.py celery worker -c 4 --loglevel=info

8. 执行任务

查看worker打印出来的日志就可以看到test_add异步任务的执行结果了
这里写图片描述

9. flower工具

Celery提供了一个工具flower,将各个任务的执行情况、各个worker的健康状态进行监控并以可视化的方式展现
这里写图片描述
Django下实现的方式如下: 
1. 安装flower:

sudo pip install flower

2.启动flower(默认会启动一个webserver,端口为5555):

python manage.py celery flower

3.进入http://192.168.56.2:5555即可查看

本文参考这位兄弟的文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值