django + redis + celery 异步任务

news/2024/10/4 20:09:20/文章来源:https://www.cnblogs.com/lanjianhua/p/18447192

目录结构

E:.
│  db.sqlite3
│  Dockerfile
│  manage.py
│  requirements.txt
│
├─celery_tasks  # 自定义一个celery的工作目录
│  │  config.py  # celery配置文件
│  │  __init__.py
│  │
│  ├─sms
│      tasks.py   #  worker任务
│      __init__.py
│    
│
├─dashboard
│  │  asgi.py
│  │  celery.py  # 同settings.py目录下 创建该文件
│  │  settings.py
│  │  urls.py
│  │  wsgi.py
│  │  __init__.py  # 修改该文件
│
├─dbcv  # app│  admin.py│  apps.py│  models.py│  serializers.py│  test.py│  tests.py│  views.py│  __init__.py
......

celery

1、创建celery工作目录
在项目根目录下创建 celery_tasks

2、创建config.py配置文件

# 配置异步任务# 设置结果存储
result_backend = 'redis://127.0.0.1:6379/1'# 设置代理人broker
broker_url = 'redis://127.0.0.1:6379/2'# celery 的启动工作数量设置
CELERY_WORKER_CONCURRENCY = 20
# 任务预取功能,就是每个工作的进程/线程在获取任务的时候,会尽量多拿 n 个,以保证获取的通讯成本可以压缩。
WORKER_PREFETCH_MULTIPLIER = 20
# 非常重要,有些情况下可以防止死锁
CELERYD_FORCE_EXECV = True
# celery 的 worker 执行多少个任务后进行重启操作
CELERY_WORKER_MAX_TASKS_PER_CHILD = 100
# 禁用所有速度限制,如果网络资源有限,不建议开足马力。
WORKER_DISABLE_RATE_LIMITS = True
# 明确指示在启动时进行连接重试
# BROKER_CONNECTION_RETRY_ON_STARTUP = True
broker_connection_retry_on_startup = True# 2、配置定时任务
timezone = 'Asia/Shanghai'
DJANGO_CELERY_BEAT_TZ_AWARE = False
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'
``2、创建celery.py同settings.py目录下 创建该文件

import os

from django.utils import timezone
from celery import Celery

from celery.schedules import crontab, timedelta

from celery_tasks import config

设置环境变量, 导入django配置; 后续便于使用django组件功能

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dashboard.settings')

app = Celery("apps")

读取配置文件中的配置

app.config_from_object(config)

自动从django注册的app中发现所有任务

app.autodiscover_tasks()

解决时区问题,定时任务启动就循环输出

app.now = timezone.now

celery -A dashboard worker -l info -P eventlet


3、创建个wocker文件:tasks.py常见的如发送邮件、短信等等

tasks.py

import time
from dashboard.celery import app

通过 @app.task 装饰器,定义celery的wocker函数对象

@app.task
def send_sms(desc=None):
print("send_sms start")
if desc:
print(desc)
time.sleep(20)
print("send_sms end")
return "send_sms ok"

4、在app视图中调用

@api_view(['GET'])
def test(request):
"""
测试token
"""
current_time = timezone.now()
print("当前时间是:{}".format(current_time))

# .delay() 方法调用
result = tasks.send_sms.delay("视图调用celery任务")res_data = {'data': {'status_code': 200}}
return Response(**res_data)

5、运行celery
打开终端,win+r,cmd

windows下需要加 -P eventlet 运行,否则会报错(celery的问题)

celery -A dashboard worker -l info -P eventlet

Linux下

celery -A dashboard worker -l info


6、运行django

python manage.py runserver


7、通过接口调用接口API,观察celery的运行即可完成!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/808050.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快乐数学2勾股定理0000000

2 勾股定理 在任意一个直角三角形中,两条直角边的平方和等于斜边的平方。 a + b = ca 和 b 分别表示直角三角形的两条直角边长度。 c 表示斜边长度。我们大多数人都认为这个公式只适用于三角形和几何图形。勾股定理可用于任何形状,也可用于任何将数字平方的公式。 2.1 了解面…

信息学奥赛复赛复习11-CSP-J2020-04方格取数-动态规划、斐波那契数列、最优子结构、重叠子问题、无后效性

PDF文档公众号回复关键字:202410041 P7074 [CSP-J2020] 方格取数 [题目描述] 设有 nm 的方格图,每个方格中都有一个整数。现有一只小熊,想从图的左上角走到右下角,每一步只能向上、向下或向右走一格,并且不能重复经过已经走过的方格,也不能走出边界。小熊会取走所有经过的…

python相平面 图形

二阶非线性自治系统绘制相平面图。假设我们有一个简单的阻尼摆系统,其状态方程可以表示为: \[ dx1/dt = x2 \\dx2/dt = -cx2 - gsin(x1) \] import numpy as np import matplotlib.pyplot as plt from scipy.integrate import odeint # 定义系统的状态方程 def pendu…

帝国CMS7.2/7.5移动端/手机端/多终端访问设置图文教程

​随着PC互联网与移动互联网的不断融合、以及各类移动访问终端增加,网站移动互联越来越重要了,所以帝国CMS7.2/7.5版本在原来版本的多访问终端功能基础上,做出更多的改进,让网站多种移动访问端制作更加方便。下面我们来讲解帝国CMS7.2版本的“多终端访问功能”使用:新增网…

这可能是最全的输入法教程了

这个教程能让你打字速度更快,体验更好输入法是我们离不开的软件,如果要评选用户最常使用的工具类应用,输入法一定名列前茅。 由于输入法实在太常用了,我们往往会忽略它:我用自带的输入法就行,打几个字,用的着琢磨吗? 实则不然,输入法软件有很多,也有很多进阶用法,这…

【极客大挑战2023】- Re -点击就送的逆向题 WriteUp

这道题给了一个.s文件 解决方案有两个: 1.利用gcc编译成可执行文件,然后反编译生成伪代码 2.直接分析汇编(我不会。。。) 1.利用gcc编译成可执行文件 linux执行gcc -o 1.s 1 IDA打开,分析并编写,注意一定要在字符串末尾加上\0结束符!!!点击查看代码 #include <stdi…

day11[Lagent 自定义你的 Agent 智能体]

环境配置 开发机选择 30% A100,镜像选择为 Cuda12.2-conda。 首先来为 Lagent 配置一个可用的环境。Lagent Web Demo 使用 使用 Lagent 的 Web Demo 来体验 InternLM2.5-7B-Chat 的智能体能力 先使用 LMDeploy 部署 InternLM2.5-7B-Chat,并启动一个 API Server然后,我们在另…

补题报告4

背景 CSP-J模拟赛 考得最好的一次得分 \(T1\): \(AC\) \(T2\): \(AC\) \(T3\): \(0\) \(T4\): \(20\)\(T1\) 三个 (\(Three\)) 赛时\(AC\) 概述 \(A,B,C\)三种微生物,他们会繁殖,在每分钟: 每个 \(A\) 可繁殖出一个\(A\),一个\(B\),一个\(C\) 每个 \(B\) 可繁殖出两个\(A\…

9-贪心算法

参考:代码随想录 题目分类大纲如下:贪心算法理论基础 什么是贪心? 贪心的本质是选择每一阶段的局部最优,从而达到全局最优。 贪心的套路(什么时候用贪心) 贪心算法并没有固定的套路,说白了就是常识性推导加上举反例。靠自己手动模拟,如果模拟可行,就可以试一试贪心策略…

【VMware VCF】使用 SoS 实用程序检查 VCF 环境的运行状态以及收集组件的日志信息。

VMware Cloud Foundation 解决方案中有一个叫 Supportability and Serviceability(SoS)可支持性和可维护性的实用程序,可能你在初始构建 VCF 管理域的时候使用过这个工具,当时使用这个工具在 VMware Cloud Builder 虚拟机中将用于部署的 VCF 管理域的 Excel 参数表转换为 J…

PbootCMS数据库配置,修改为Mysql数据库,配置Mysql出错解决办法

如果你在将PbootCMS从SQLite切换到MySQL时遇到了连接问题,可以按照以下步骤进行排查和解决: 步骤 1: 修改数据库连接驱动类型 确保你正确地修改了数据库连接驱动类型。PbootCMS支持多种数据库驱动,你可以逐一尝试不同的驱动类型。 步骤 2: 修改数据库服务器地址 将数据库服务…

pbootcms模板后台编辑器无法上传图片提示:后端配置项没有正常加载,上传插件不能正常使用!

针对 PbootCMS 中 UEditor 编辑器单图片上传按钮无反应以及多图片上传提示“后台配置项返回格式出错,上传功能将不能正常使用!”的问题,可以按照以下步骤进行排查和修复。 1. 修改时区设置 首先,根据你提供的信息,时区设置可能存在问题。请按照以下步骤修改时区设置:打开…