Django中怎么使用celery?

原创 220阅读 · 时间2019年3月20日 13:49

首先,要明确,在django项目中添加了celery有什么好处?

在 web项目中经常会遇到一些耗时的操作,比如:发送邮件、发送短信、生成PDF。这些操作在某些情况下需要立即返回结果给用户,但是可以在后台异步执行。当然celery能完成的功能远不止异步任务,还有很常用功能–定时任务;功能还包括:定义工作流、监控、任务流控制、资源泄露保护以及自定义用户自建等,

比如:用户邮箱注册的时候,在发送邮件的时候可以先把“已经发送激活邮件到邮箱”返回给用户,同时把邮件发送任务提交到异步处理线程中。

现在,大概说一下 在django中配合redis怎么使用celery;

首先安装 django-celery,celery, mysql,redis.

  • pip install django-celery

  • pip install celery

  • redis 和 mysql 的安装请参考其他文章

配置

在项目的根目录下的settings.py中

INSTALLED_APPS = [
    ...
    'djcelery',
]

在项目的根目录下的settings.py文件末追加:

import djcelery

# linux下以root用户启动加上这句
from celery import platforms
platforms.C_FORCE_ROOT = True

djcelery.setup_loader()
# redis://你的redis地址/redis数据库
BROKER_URL = 'redis://127.0.0.1:6379/3'
# {"项目目录.执行文件名"} ? 这句不懂看下文
CELERY_IMPORTS = {'work.task'}

在要使用celery的app中,新建 task.py文件。
我这里要使用celery的app是:work
task.py:

from celery import task
import time

# 必须加@task这个装饰器
@task
def yanshi():
    print("开始")
    time.sleep(6)
    print("结束")

在在要使用celery的app中的views.py文件里,调用task.py中的耗时函数。
view.py:

from django.shortcuts import render
from . import task

def wait(request):
        # 调用汉书后面必须加.delay
        # ()中可以传入参数。
    task.ys.delay()
    return render(request, 'celery_demo/wait.html', {})

同步数据库

python manage.py makemigrations
python manage.py migrate

执行

打开终端:
进入到包含celery的环境 —>>> 切换到项目的根目录
执行语句

python manage.py celery worker --loglevel=info

出现如下图所示,即为成功。

8.png


评论

本站升级中... 如有好的建议请加入QQ群!

相关文章推荐 ?
近七日热文推荐 !
回到顶部