异步测试celery
django异步请求:
Django从一个http请求发起,到获得响应返回html页面的流程大致如下:http请求发起 -- http handling(request解析) -- url mapping(url正则匹配找到对应的View) -- 在View中进行逻辑的处理、数据计算(包括调用Model类进行数据库的增删改查)--将数据推送到template,返回对应的template/response。
同步请求与异步请求的区别:
同步请求:所有逻辑处理、数据计算任务在View中处理完毕后返回response。在View处理任务时用户处于等待状态,直到页面返回结果。
异步请求:View中先返回response,再在后台处理任务。用户无需等待,可以继续浏览网站。当任务处理完成时,我们可以再告知用户。
celery安装包:
pip install celery
pip install celery-with-redis
pip install django-celery
celery执行命令:
celery -A myproject beat -l info 定时任务
celery -A mymac worker -l info 异步任务
开两个黑窗口,黑窗口下先执行异步任务,在执行定时任务
在第一次运行异步任务时会报asymc错,此时我们需要改celery的源代码。
把async改成async_my.
所需要需改的文件:
C:\Python37\Lib\site-packages\celery\utils路径 (必须先修改)
celery/utils/timer2.py
/concurrency/asynpool.py
kombu/transport/redis.py
celery/worker/auto_scale.py,components,consumer,strategy
例:
也可能会出现库不匹配,这时我们需要降版本处理:
先删除/:
pip uninstall redis
指定版本号
pip install redis==2.10.6
Celery是基于Python开发的一个分布式任务队列框架,支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度。
配置文件
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'mymac',
'myapp',
'corsheaders',
'djcelery',
]
#配置celery
import djcelery
djcelery.setup_loader()
BROKER_URL = 'redis://127.0.0.1:6379'
CELERY_IMPORTS = ('mymac.tasks')
Celery.py
#导包
import os
import django
from celery import Celery
from django.conf import settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mymac.settings')
django.setup()
app = Celery('mymac')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
tasks.py
- 如何使用java代码通过JDBC连接Impala(附Github源码)
- 点击此文,无需转发,即可下载上千个免费R包
- 如何使用Cloudera Manager启用HDFS的HA
- 刷剧不忘学CNN:TF+Keras识别辛普森一家人物 | 教程+代码+数据集
- 深度学习中的基础线代知识-初学者指南
- 如何通过CM升级Kafka0.11及Spark2.2
- MyEtherWallet 手动添加币乎代币(KEY)
- 玩转TensorFlow深度学习
- 如何在CDH实现HDFS透明加密
- 漏洞分析】Shiro RememberMe 1.2.4 反序列化导致的命令执行漏洞
- 机器学习算法再比较
- 区块链钱包开发
- 加密货币常见加密算法
- 如何给Kerberos环境下的CDH集群添加Gateway节点
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法