作者:土豆豆,一个做网站开发的机器学习兼职安全的学生
博客主页:https://www.zhihu.com/people/tu-dou-dou-27-10
注:本文使用的开发环境如下,如不同系统或环境之间可能存在差异,本文不做其它说明
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,建议您先安装 brew 参考 brew安装
Ubuntu 安装
Linux 安装
请访问 redis 下载 最新的安装包,本文使用的是在书写本文这个时间时最新的安装包,如官方发布更新,恕本文不另行通知更改。
Windows 安装 参考菜鸟教程-Redis 安装
作者未进行尝试,所有错误请自行 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)
代码文件(./demo/demo/celery.py)
代码文件(./demo/app/tasks.py)
编辑完成代码之后,开始运行web程式吧
首先,我们要启动 redis 服务,在终端执行 redis-server 启动服务,如看见类似下面这样的输出,且没有报错,则redis启动成功。
python manage.py runservercelery-A demo worker-l info
再次访问网址

我们来看一下日志

在访问网址5秒之后,自定义的add函数运行完成,并没有阻塞我们的访问响应。
0x03 结语
至此,我想你应该已经初步了解如何在Django中使用celery了。
最近热门文章
用Python更加了解微信好友
如何用Python做一个骚气的程序员
用Python爬取陈奕迅新歌《我们》10万条评论的新发现
用Python分析苹果公司股价数据
Python自然语言处理分析倚天屠龙记