听说 Django 与 celery 配合更美味

2023-12-29 07:18

本文主要是介绍听说 Django 与 celery 配合更美味,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

注:本文使用的开发环境如下,如不同系统或环境之间可能存在差异,本文不做其它说明

操作系统 : MacOS 10.13.4

Python版本 : Python 3.5.4

Django版本 : 2.0.5

celery 版本 : 4.1.0

celery后端 : Redis

特别强调本文使用的是原生的 celery,因为celery官方已经在3.x版本之后将 django-celery 兼容于 celery,不再使用 django-celery **

0x00 前言

最近要写个Web项目,为了简便就选择使用Django作为后端开发了,突然发现程序要使用异步架构,在此原谅我废话几句说明为什么要使用异步架构,什么又是异步架构(我相信你在看这篇文章的时候已经对网络请求和回应有所了解,也应当知道Django的请求回应流程,如果不了解,那就请直接在本篇文章下面点个赞之后关闭本网页吧,因为接下来的内容已经对你目前的情况存在不适了,想看我的解释,不存在的)

言归正传,因为Django的请求回应机制,必须在执行完语句后才返回请求,但是在一些特殊的环境下,这样的操作就会带来很大的不便,比如程式在收到一个请求之后,要做很费时间的操作,用户就会出现迟迟收不到网站的响应,比如我下面的例子。呃,先放个图片镇镇场。

0x01 未做异步处理时的场景

部分代码如下

未处理异步

为了使效果更加明显,我在函数里面添加了sleep函数,模拟请求,

请求时间超长的说

其实sleep函数的存在感觉就是为我这样的“流氓开发者”而存在的,不给钱就不给优化,故意增加sleep的时间,滋滋(捂脸)。别打我

这里,我们发现当请求函数里面存在费时的函数,请求就会出现延时,降低用户体验。接下来,我要开始表演啦!!! 前方高能

0x02 听说 Django 与 celery 配合更美味

0x02-0 安装 celery

读到这里,我暂且认为您是会安装Django并且会写Django的基础语句的,如果不是,建议您点个赞之后关闭本网站,下面的内容可能会让您感到糟糕。

首先,执行安装,安装姿势详见 First Steps with Celery ,如果不想打开请直接安装下面的方式安装,但如果您想更换 celery 的后端或者安装时出现了错误,建议您优先查看此网站进行解决。

Mac OS X 安装

$ brew install Redis    # Redis 安装,需提前安装 brew
$ pip install celery    # pip 安装celery库
$ pip install redis     # pip 安装 redis库

如果您没有安装 brew,建议您先安装 brew 参考brew安装

Ubuntu 安装

$ sudo apt install redis    # Redis 安装
$ pip install celery        # pip 安装celery库
$ pip install redis         # pip 安装 redis库

Linux 安装

请访问redis 下载 最新的安装包,本文使用的是在书写本文这个时间时最新的安装包,如官方发布更新,恕本文不另行通知更改。

$ wget http://download.redis.io/releases/redis-4.0.9.tar.gz
$ tar xzf redis-4.0.9.tar.gz
$ cd redis-4.0.9
$ make
# make完后 redis-4.0.9 目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli,两个程序位于安装目录 src 目录下:
# 下面启动redis服务.
$ cd src
$ ./redis-server

Windows 安装 参考菜鸟教程-Redis 安装

:warning: 作者未进行尝试,所有错误请自行 Google

下载地址: https://github.com/MSOpenTech/redis/releases 。

Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip 压缩包到 C 盘,解压后,将文件夹重新命名为 redis 。

打开一个 cmd 窗口 使用cd命令切换目录到 C:\redis 运行 redis-server.exe redis.windows.conf 。

如果想方便的话,可以把 redis 的路径加到系统的环境变量里,这样就省得再输路径了,后面的那个 redis.windows.conf 可以省略,如果省略,会启用默认的。输入之后,会显示如下界面:

0x02-1 编写代码

部分代码截图如下

添加异步模块

代码文件(./demo/demo/settings.py)

···# Celery settingsCELERY_BROKER_URL = 'redis://localhost'#: Only add pickle to this list if your broker is secured
#: from unwanted access (see userguide/security.html)
CELERY_ACCEPT_CONTENT = ['json']
CELERY_RESULT_BACKEND = 'redis://localhost'
CELERY_TASK_SERIALIZER = 'json'

代码文件(./demo/demo/celery.py)

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'demo.settings')app = Celery('demo')
# this ‘demo’ is your project name !!!# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
#   should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')# Load task modules from all registered Django app configs.
app.autodiscover_tasks()

代码文件(./demo/app/tasks.py)

import time
from celery import Celerycelery_app = Celery('tasks', backend='redis://localhost', broker='redis://localhost')
# this is celery settings# this is a function about need many time
@celery_app.task
def add(a, b):time.sleep(5)return a + b

编辑完成代码之后,开始运行web程式吧

首先,我们要启动 redis 服务,在终端执行 redis-server 启动服务,如看见类似下面这样的输出,且没有报错,则redis启动成功。

5433:C 14 May 11:24:01.463 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
5433:C 14 May 11:24:01.465 # Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=5433, just started
5433:C 14 May 11:24:01.465 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
5433:M 14 May 11:24:01.467 * Increased maximum number of open files to 10032 (it was originally set to 256)._._                                                  _.-``__ ''-._                                             _.-``    `.  `_.  ''-._           Redis 4.0.9 (00000000/0) 64 bit.-`` .-```.  ```\/    _.,_ ''-._                                   (    '      ,       .-`  | `,    )     Running in standalone mode|`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379|    `-._   `._    /     _.-'    |     PID: 5433`-._    `-._  `-./  _.-'    _.-'                                   |`-._`-._    `-.__.-'    _.-'_.-'|                                  |    `-._`-._        _.-'_.-'    |           http://redis.io        `-._    `-._`-.__.-'_.-'    _.-'                                   |`-._`-._    `-.__.-'    _.-'_.-'|                                  |    `-._`-._        _.-'_.-'    |                                  `-._    `-._`-.__.-'_.-'    _.-'                                   `-._    `-.__.-'    _.-'                                       `-._        _.-'                                           `-.__.-'                                               5433:M 14 May 11:24:01.470 # Server initialized
5433:M 14 May 11:24:01.470 * DB loaded from disk: 0.000 seconds
5433:M 14 May 11:24:01.470 * Ready to accept connections
^C5433:signal-handler (1526271328) Received SIGINT scheduling shutdown...
5433:M 14 May 12:15:28.345 # User requested shutdown...
5433:M 14 May 12:15:28.345 * Saving the final RDB snapshot before exiting.
5433:M 14 May 12:15:28.348 * DB saved on disk
5433:M 14 May 12:15:28.348 # Redis is now ready to exit, bye bye...

之后新建终端,执行命令 python manage.py runserver ,之后再新建一个终端,执行命令 celery -A demo worker -l info (注: 此处的demo为Django项目名称),没有看到报错的话,就证明运行成功了。

再次访问网址

访问时间变短了有木有啊

我们来看一下日志

终端日志中输出了计算结果

在访问网址5秒之后,自定义的 add 函数运行完成,并没有阻塞我们的访问响应。

更多Python视频、源码、资料加群725638078免费获取

0x03 结语

至此,我想你应该已经初步了解如何在Django中使用celery了。

代码相见 仓库

感谢您的阅读,点赞和打赏是一种美德,卖萌ヾ(≧O≦)〃嗷~

转载至:听说 Django 与 celery 配合更美味

这篇关于听说 Django 与 celery 配合更美味的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/548752

相关文章

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

利用Django框架快速构建Web应用:从零到上线

随着互联网的发展,Web应用的需求日益增长,而Django作为一个高级的Python Web框架,以其强大的功能和灵活的架构,成为了众多开发者的选择。本文将指导你如何从零开始使用Django框架构建一个简单的Web应用,并将其部署到线上,让世界看到你的作品。 Django简介 Django是由Adrian Holovaty和Simon Willison于2005年开发的一个开源框架,旨在简

Linux搭建Python3、Django环境

开发十年,就只剩下这套架构体系了! >>>    好久没写了,朋友们,我又回来了。 安装Python3 Python全部版本下载地址:         https://www.python.org/ftp/ 解决RedHat,使用Python3退格出现乱码问题:         yum -y install readline-devel.x86_64 下载Python3:

Django 第十七课 -- 视图 - FBV 与 CBV

目录 一. 前言 二. FBV 三. CBV 一. 前言 FBV(function base views) 基于函数的视图,就是在视图里使用函数处理请求。 CBV(class base views) 基于类的视图,就是在视图里使用类处理请求。 二. FBV 基于函数的视图其实我们前面章节一直在使用,就是使用了函数来处理用户的请求,查看以下实例: 路由配置: urlpat

树莓派使用WiringPi库配合时间函数实现超声波测距

树莓派使用WiringPi库配合时间函数实现超声波测距 文章目录 树莓派使用WiringPi库配合时间函数实现超声波测距一、HR-04超声波模块原理1.1 超声波测距原理:1.2 超声波时序图: 二、树莓派与超声波模块硬件连接三、时间函数3.1 时间函数gettimeofday()原型和头文件: 四、实现超声波测距4.1 使用wiringOP库和时间函数实现超声波测距: 五、实现超声波测距

django摄影竞赛小程序论文源码调试讲解

2系统关键技术及工具简介 系统开发过程中设计的关键技术是系统的核心,而开发工具则会影响的项目开发的进程和效率。第二部分便描述了系统的设计与实现等相关开发工具。 2.1 Python简介 Python 属于一个高层次的脚本语言,以解释性,编译性,互动性和面向对象相结合。在设计上相比其他语言,它更具有特色语法结构,很强的可读性。 2.2 Django框架 Django是一个开放源

Django 测试指南

#Django 测试指南 对绝大部分人来说,测试Django应用感觉很神秘,他们只是听说代码必须要测试,但是经常找不到线索如何入手。当他们看了Django的测试文档,他们找到深入的哪些功能是可用的,但是如果实现没有任何指导。 这是本博客系列的第一篇,尝试帮助大家减轻压力,使得每个人在测试潮流。假设你从来没有做过任何测试,但是对Python&Django很熟悉了。 我们将贯穿添加测试到pere

使用django-simple-captcha遇到的坑

使用django-simple-captcha遇到的坑 一站点gongshare.com在做注册功能时验证码采用的django-simple-captcha,因为笔者开发环境采用的Windows 64bit系统,结果安装使用的时候接二连三遇到好几个坑。 django-simple-captcha需要依赖django1.3+、PIL1.1.7+或者Pillow2.0+,根据文档安装后开始使用时,

解决Django会话中的竞态条件

Django 会话中的竞态条件(race condition)问题通常发生在多个请求几乎同时修改同一个会话数据时,导致数据丢失或数据不一致。这种情况在需要频繁更新会话数据的场景(如实时聊天应用、并发请求处理等)中尤为常见。 1、问题背景 在 Django 中使用会话时,可能会遇到竞态条件,导致数据丢失或不一致。竞态条件是指两个或多个请求同时访问共享资源时,由于执行顺序的不确定性,导致数据不

Django+Vue3前后端分离学习(五)(前端登录页面搭建)

1、如果需要使用组合式API,需要安装插件: npm install vite-plugin-vue-setup-extend --save-dev 在vite.config.js里配置: 首先导入: import VueSetupExtend from 'vite-plugin-vue-setup-extend' 添加: 2、创建login.vue 然后再index.js里添加