Django中使用Celery实现异步队列(基于redis)

Song1796 次浏览0个评论2018年06月20日

楼主最近写一个智能客服的系统,会用到异步队列处理任务,所以我整理了一下:Django中使用Celery实现异步队列(基于redis)

一、环境需求

celery==3.1.25
celery-with-redis==3.0
django-celery==3.1.17

二、配置

进入项目settings.py配置环境

import djcelery

...

INSTALLED_APPS = (
    ...
    'djcelery',
}

...

djcelery.setup_loader()
# 传递消息时使用的redis 的ip 端口 数据库名
BROKER_URL = 'redis://127.0.0.1:6379/2'
# 如果有数据库密码
# BROKER_URL = 'redis://:foobared@localhost:6379/02'
# 在tasks文件夹里面的task模块的内容--所以需要创建模块
CELERY_IMPORTS = ('tasks.task')

三、使用celery队列

1、编写task任务

进入项目下,在manage.py目录新建tasks/文件夹,然后创建task.py文件

from django.core.mail import send_mail
from celery import task
from django.conf import settings

@task
def sayemail(email):
    print(email)

2、在django视图使用celery队列

使用队列非常简单,只需要引入task.py文件即可,然后通过访问视图即可调用队列:

from tasks import task

def sayemail(request):
    task.sayemail.delay("admin@ptorch.com")
    # 将任务教给celery执行
    return HttpResponse('ok')

3、生成迁移以及开启服务

执行迁移生成celery需要的数据表

python manage.py migrate

启动Redis,已经无需要重复启动,参考ubuntu中redis的安装与设置以及允许远程访问

redis-server

启动worker,具体可以参考Python使用Celery分布式异步队列/任务调度(基于Redis)

python manage.py celery worker --loglevel=info

四、使用flower检测队列运行情况(非必须)

Celery提供了一个工具flower,将各个任务的执行情况、各个worker的健康状态进行监控并以可视化的方式展现

1、安装flower:

pip install flower

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

python manage.py celery flower

3、进入http://localhost:5555即可查看

四、常见问题

1、django.db.utils.ProgrammingError: (1146, "Table 'protal.celery_taskmeta' doesn't exist")

执行迁移生成celery需要的数据表

python manage.py migrate

原文出处 :Django中使用Celery实现异步队列(基于redis) - pytorch中文网 原文出处: https://www.ptorch.com/news/185.html

提交评论

请登录后评论

用户评论

    当前暂无评价,快来发表您的观点吧...

更多相关好文

    当前暂无更多相关好文推荐...