Django 中使用Celery实现异步任务
1、在settings.py
同级目录下,新增一个celery.py
的文件
需要注意的是:你的项目目录名要和配置一样
例如我的项目目录名就是 base_django_api
我的目录结构如下:
# celery.py
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery, platforms
from django.conf import settingsos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'base_django_api.settings')
app = Celery('base_django_api')app.config_from_object('django.conf:settings')app.autodiscover_tasks()platforms.C_FORCE_ROOT = True@app.task(bind=True)
def debug_task(self):print('Request: {0!r}'.format(self.request))
2、修改settings.py
同级目录下的 __init__.py
文件
加入一下内容
from __future__ import absolute_import, unicode_literals# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .celery import app as celery_app__all__ = ('celery_app',)
3、在你的app里面创建tasks.py
文件
例如:本例在 base app内创建一个tasks.py
文件
from __future__ import absolute_import, unicode_literals
from celery import shared_task
from base_django_api.celery import app
import time@shared_task
def mul(x, y):print('发生耗时操作...')time.sleep(10) # 模拟耗时操作return x * y
4、使用视图函数注册到路由,通过http请求来出发异步任务
本例:用来模拟实际场景中的异步请求,在收到http请求时,发起异步任务去执行,http调用处直接马上返回结果,优化用户体验。
修改对应的视图函数views.py
# apps/base/views.py
from .tasks import mul
class BeginCelery(APIView):def get(self, request):'''测试开启celery'''try:json_data = {"message": "ok", "errorCode": 0, "data": {}}#发起异步任务 mul_result = mul.delay(3,5)return Response(json_data)except Exception as e:print('发生错误:',e)return Response({"message": "出现了无法预料的view视图错误:%s" % e, "errorCode": 1, "data": {}})
注册到路由urls.py
from base.views import BeginCelery
from django.urls import path, includeurlpatterns = [path('celery/', BeginCelery.as_view(), name='celery测试'),
]
启动Django:
python manage.py runserver
启动celery:
celery -A base_django_api worker -l info
调用接口测试
查看celery运行结果
5、为什么本例不要Celery实现定时任务
因为在Django中,使用django_crontab 实现定时任务,更加的简洁、方便,感兴趣的同学可以查一下。
Django 中使用Celery实现异步任务相关推荐
- django中使用celery简单介绍
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 本章节我们重点在于实现,如何存储任务的结果. 我们将任务函数改为: from celery_demo.celery im ...
- Django中使用Celery(附赠代码)
一.简介 Celery是由Python开发.简单.灵活.可靠的分布式任务队列,其本质是生产者消费者模型,生产者发送任务到消息队列,消费者负责处理任务.Celery侧重于实时操作,但对调度支持也很好,其 ...
- Django中使用Celery
创建Django项目:略过 配置python 多任务一定要写celery celery配置 视图中: 自己配置URL: 启动worker celery worker -A celery_task -l ...
- 在django中使用celery
前言: 针对高延时任务, 直接在一次网络请求中处理完毕会导致很不好的体验, celery则可以不阻塞请求后台处理这些任务, 并且可以使用django的models进行数据库操作. 环境 python ...
- celery异步执行任务在Django中的应用实例
1. 创建django项目celery_demo, 创建应用demo: django-admin startproject celery_demo python manage.py startapp ...
- Django配置celery执行异步任务和定时任务
原生celery,非djcelery模块,所有演示均基于Django2.0 celery是一个基于python开发的简单.灵活且可靠的分布式任务队列框架,支持使用任务队列的方式在分布式的机器/进程/线 ...
- Django中Celery简介
初识Celery: Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理,可将一些耗时的任务放入该消息队列中处理,一些定时任务也可以放入队列中自动执行 ...
- Django+redis+celery实现异步任务
1 Django中的异步请求 Django Web中从一个http请求发起,到获得响应返回html页面的流程大致如下:http请求发起 -- http handling(request解析) -- u ...
- Django 中celery的使用
1.django应用Celery django框架请求/响应的过程是同步的,框架本身无法实现异步响应. 但是我们在项目过程中会经常会遇到一些耗时的任务, 比如:发送邮件.发送短信.大数据统计等等,这些 ...
最新文章
- 亲身经历,在实验室不要乱按按钮!!
- List.addAll方法的入参不能为null
- strace动态调试 php,PHP实现通过strace定位故障原因的方法
- 删除oracle 连接进程,如何查看和清除oracle无用的连接进程
- 自动化测试平台搭建从零开始
- winform + INotifyPropertyChanged + IDataErrorInfo + ErrorProvider实现自动验证功能
- 无线短距通信技术标准:WIFI,蓝牙,ZigBee
- bzoj 4516: [Sdoi2016]生成魔咒
- java流 视频_java如何对视频文件处理?包括拉流推流视频截取等?
- weibo.cn html5,微博爬虫:爬取微博正文、关注人
- 百度音乐助手 下载高品质音乐
- 不用vpn的谷歌翻译网址
- 方差互换(Variance Swap)定价推导及VIX相关介绍
- 儿童节html5小游戏,2016六一儿童节主题班会小游戏大全
- python高效控制模拟器_使用Python实现RISCV模拟器(一)
- window下Python查看已经启动的进程名称并关闭
- 获取手机电池百分比和电池容量方法
- javascript英语单词音节拆分_英语单词音节拆分程序
- echarts柱状图自定义显示内容
- Spark On YARN 环境搭建