Django2.2+Celery4.4.2+Redis 实现异步任务队列以及定时任务

安装对应的库

pip3 install celery==4.4.2
pip3 install gevent==21.1.2	
pip3 install Django==2.0.4

配置settings.py文件:

CELERY_BROKER_URL = 'redis://localhost:6379/'

CELERY_RESULT_BACKEND = 'redis://localhost:6379/'

CELERY_RESULT_SERIALIZER = 'json'

这里broker配置redis,同时backend也就是任务结果也存到redis中,格式为json,方便读写

在settings.py同级目录创建celery.py

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

# 设置环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mydjango.settings')

# 注册Celery的APP
#注意mydjango为你当前的django项目名称
app = Celery('mydjango')
# 绑定配置文件
app.config_from_object('django.conf:settings', namespace='CELERY')

# 自动发现各个app下的tasks.py文件
app.autodiscover_tasks()
#也可以指定文件
app.autodiscover_tasks(['function.check_email'])

修改settings.py同级目录的init.py文件

from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

#导包
import pymysql
#初始化
pymysql.install_as_MySQLdb()



__all__ = ['celery_app']

在应用中创建tasks.py文件

from celery.task import task

# 自定义要执行的task任务
@task
def print_test():
	print("nict try")
	return 'hello'

如果需要,也可以在settings.py里将该任务配置为定时任务(周期任务)

from celery.schedules import crontab
CELERY_BEAT_SCHEDULE = {
    # 周期性任务
    'task-one': {
        'task': 'myapp.tasks.print_test',
        'schedule': 5.0, # 每5秒执行一次
        # 'args': ()
    }
}

同时异步任务也可以通过django的视图进行在线调用

from myapp import tasks

def ctest(request,*args,**kwargs):
	#这里的delay方法就是异步方式请求,而非django默认的同步执行步骤
    res=tasks.print_test.delay()
    #任务逻辑
    return JsonResponse({'status':'successful','task_id':res.task_id})

在manage.py的目录下启动celery服务

celery worker -A mydjango -l info -P gevent

在浏览器中调用异步服务接口

在这里插入图片描述

同时也可以在backend中查询任务结果

注意一点,redis中的key并不是单纯的task_id,而是需要加上前缀celery-task-meta-
在这里插入图片描述

最后,如果需要启动定时任务,就需要在manage.py所在的文件夹内单独启动beat服务

celery -A mydjango beat -l info

可以看到任务队列会每隔五秒执行一次定时任务
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值