django3.2版本在windows系统使用celery5.0详细配置

由于我是创建了一个新的django项目来测试使用celery的,
所以可能有些东西会和现成的django项目不同,
django项目初始生成和时区配置,数据库配置,以及其它配置我就不详说了,
直接从django初始项目开始安装celery开始。

一、安装celery和redis ,Windows还需安装eventlet库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里的安装是pip安装,也可借助pycharm安装。

django项目安装完这些库之后windows系统还需安装redis服务
windows系统安装redis可参考菜鸟教程这篇安装教程:
https://www.runoob.com/redis/redis-install.html
上述安装之后需要一直开着运行服务的命令行,否则就会关闭redis服务,我们可以将redis部署成像mysql一样的服务,这样就不用一直开启命令行了。

安装命令:redis-server.exe --service-install redis.windows.conf --loglevel verbose

然后开启服务即可

和mysql一样,我们肯定需要一款Redis桌面管理工具
这里我推荐的是RDM 连接之后的样子是:
在这里插入图片描述
下载地址是:https://pan.baidu.com/s/1hss1SHN8683PVTRwPs61dQ
提取密码: zxvf

二、配置celery

整个项目的文件结构:
在这里插入图片描述
我们首先要修改Timingsystem目录下的settings.py
我们在settings.py 文件的末尾追加celery的配置即可

# celery 相关配置
# 配置celery时区,默认时UTC。
timezone = TIME_ZONE

# 任务队列的链接地址 celery配置redis作为broker。redis有16个数据库,编号0~15,这里使用第1个。
broker_url = 'redis://127.0.0.1:6379/1'

# 设置存储结果的后台  结果队列的链接地址
result_backend = 'redis://127.0.0.1:6379/0'

# 可接受的内容格式
accept_content = ["json"]
# 任务序列化数据格式
task_serializer = "json"
# 结果序列化数据格式
result_serializer = "json"

然后在Timingsystem目录下新建一个celery.py
以下是整个celery.py 文件的代码:

"""
@Description : 
@File        : celery.py
@Project     : Timingsystem
@Time        : 2021/11/10 10:51
@Author      : baiyang
@Software    : PyCharm
"""

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
from celery.schedules import crontab
from django.conf import settings

# 指定Django默认配置文件模块
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings')

# 为我们的项目myproject创建一个Celery实例。这里不指定broker backend 容易出现错误。
# 如果没有密码 使用 'redis://127.0.0.1:6379/0'
app = Celery('Timingsystem', broker='redis://127.0.0.1:6379/0', backend='redis://127.0.0.1:6379/0')  # Timingsystem是项目的名字

# 这里指定从django的settings.py里读取celery配置
app.config_from_object('django.conf:settings')
# 下面的设置就是关于调度器beat的设置,
# 具体参考https://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html
app.conf.beat_schedule = {
    'autosc': {  # 取个名字
        'task': 'timing.tasks.auto_sc',  # 设置是要将哪个任务进行定时
        'schedule': crontab(),  # 调用crontab进行具体时间的定义
    },
}
# 自动从所有已注册的django app中加载任务
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

然后在Timingsystem目录下的__init__.py引入celery对象

from __future__ import absolute_import, unicode_literals
import pymysql
# 引入celery实例对象
from .celery import app as celery_app

__all__ = ('celery_app',)
pymysql.install_as_MySQLdb()

三、新建task.py定义任务

最后我们在timing目录下新建一个task.py用来定义要运行的任务,我们看下目录结构:
在这里插入图片描述
以下是task.py代码:

"""
@Description : 
@File        : tasks.py
@Project     : Timingsystem
@Time        : 2021/11/10 11:09
@Author      : baiyang
@Software    : PyCharm
"""
from __future__ import absolute_import
from celery import shared_task


@shared_task
# 定义的定时任务函数
def auto_sc():
    print('sc test?')
    return 'halo'


# # name表示设置任务的名称,如果不填写,则默认使用函数名做为任务名
# 定义的两个异步函数
@shared_task(name="send_sms")
def send_sms():
    print("发送短信!!!")
    return "s"


@shared_task(name="send_sms2")
def send_sms2():
    print("发送短信任务2!!!")
    print("p")
    return "p"

四 在views.py里调用task.py定义的任务

在views.py里调用方法后别忘记在url.py 文件里新增url映射

以下是代码:

from django.shortcuts import render

# Create your views here.
from django.http import JsonResponse
from timing import tasks


def deme_view(request):
    # 用delay方法运行函数,这里两个函数可以同时被调用,也就是并行
    result_one = tasks.send_sms.delay()
    result_two = tasks.send_sms2.delay()

    # 用get方法拿到返回的结果
    print(result_one.get())
    print(result_two.get())
    final_result = result_one.get() + result_two.get()

    return JsonResponse(
        {
            'code': 200,
            'message': 'success',
            'data': {
                'result': final_result
            }
        }
    )

五、运行项目

运行命令需注意目录级别

首先开启django项目(C:\Timingsystem):

python manage.py runserver 192.168.102.25:8001

然后开启celery(C:\Timingsystem\Timingsystem)

celery -A Timingsystem  worker -l DEBUG -P eventlet

然后开启定时任务(C:\Timingsystem\Timingsystem)

celery -A Timingsystem  beat -l DEBUG

浏览器运行截图:
在这里插入图片描述

pycharm端运行截图:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
redis运行截图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值