Django(Celery+日志)

celery文档参考:http://docs.jinkan.org/docs/celery/

同步请求:所有逻辑处理、数据计算任务在View中处理完毕后返回response。在View处理任务时用户处于等待状态,直到页面返回结果。异步请求:View中先返回response,再在后台处理任务。用户无需等待,可以继续浏览网站。当任务处理完成时,我们可以再告知用户。

Celery简介

  Celery是由Python开发、简单、灵活、可靠的分布式任务队列,其本质是生产者消费者模型,
生产者发送任务到消息队列,消费者负责处理任务。Celery侧重于实时操作,但对调度支持也很好,
其每天可以处理数以百万计的任务。

特点:

    简单:熟 悉celery的工作流程后,配置使用简单高可用:当任务执行失败或执行过程中发生连接中断,celery会自动尝试重新执行任务快速:一个单进程的celery每分钟可处理上百万个任务灵活:几乎celery的各个组件都可以被扩展及自定制

应用场景举例

  1.耗时任务:当用户在网站进行某个操作需要很长时间完成时,我们可以将这种操作交给Celery执行,直接返回给用户,等到Celery执行完成以后通知用户,大大提好网站的并发以及用户的体验感。2.任务场景:比如在运维场景下需要批量在几百台机器执行某些命令或者任务,此时Celery可以轻松搞定。3.定时任务:向定时导数据报表、定时发送通知类似场景,虽然Linux的计划任务可以帮我实现,但是非常不利于管理,而Celery可以提供管理接口和丰富的API。

工作原理

任务模块Task包含异步任务和定时任务。其中,异步任务通常在业务逻辑中被触发并发往消息队列,而定时任务由Celery Beat进程周期性地将任务发往消息队列;
任务执行单元Worker实时监视消息队列获取队列中的任务执行;
Woker执行完任务后将结果保存在Backend中;

Celery组成模块

在这里插入图片描述

1.任务模块 Task包含异步任务和定时任务。其中,异步任务通常在业务逻辑中被触发并发往任务队列,而定时任务由 Celery Beat 进程周期性地将任务发往任务队列2.消息中间件Broker任务调度队列,接收任务生产者发来的消息(即任务),将任务存入队列。Celery 本身不提供队列服务,支持RabbitMQ、Redis、Amazon SQS、MongoDB、Memcached 等,官方推荐RabbitMQ。3.任务执行单元WorkerWorker是任务执行单元,负责从消息队列中取出任务执行,它可以启动一个或者多个,也可以启动在不同的机器节点,这就是其实现分布式的核心。4.结果存储Backend用于存储任务的执行结果,以供查询。同消息中间件一样,支持:RabbitMQ、 Redis、Memcached,SQLAlchemy, Django ORM、Apache Cassandra、Elasticsearch。

使用

1.配置settings.py# 配置异步任务BROKER_URL = 'redis://127.0.0.1:6379/1'# 存储结果并跟踪结果CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/1'# 消息格式CELERY_ACCEPT_CONNECT=['application/json',]CELERY_TASK_SERIALIZER = 'json'CELERY_RESULT_SERIALIZER = 'json'# celery的时区CELERY_TIMEZONE = TIME_ZONE2.下载安装包pip install redis==2.10.6(版本过高报错:AttributeError:'str' object has no attribute 'items')pip install celerypip install celery-with-redis3.编写celery文件(和settings.py同级)import osfrom celery import Celeryfrom djangoday10.settings import BROKER_URL, CELERY_RESULT_BACKENDproject_name = os.path.split(os.path.abspath('.'))[-1]project_settings = '%s.settings' % project_name# 设置环境变量os.environ.setdefault('DJANGO_SETTINGS_MODULE', project_settings)# 实例化celeryapp = Celery(project_name)# 使用django的配置文件进行配置app.config_from_object('django.conf:settings')4.修改__init__.pyfrom __future__ import absolute_import	from .celery import app as celery_app5.在需要的app中定义tasks.py在该文件中定义任务@shared_taskdef sendmail(uid, email):subject = '异步发送邮件测试'message = "亲爱的用户你好!点击激活用户<a href='http://127.0.0.1:8000/active/%s'> 激活 </a>" % uidsend_mail(subject, message='', from_email=EMAIL_HOST_USER, recipient_list=[email], html_message=message)6. 调用任务:# 此时启动异步发送邮件,delay是注册celery异步任务的关键点result = sendmail.delay(uid,email)7. 测试异步:启动异步workercelery -A projectname  worker -l infopython manage.py celery worker --loglevel=infofrom kombu.async.timer import Entry, Timer as Schedule, to_timestamp, logger^
SyntaxError: invalid syntax原因: async 在 python3.7已经是关键字了,但是celery4.4.6版本没有更新导致的。此问题将在下一个版本修复。解决办法: 将celery文件中的async命名为其他变量名/ 或者降低python版本3.7之下的8.通过可视化的flower查看celery的执行情况:pip install flowerflower -A djangoday10 --port=5500http://localhost:5500  打开查看

日志:

https://www.cnblogs.com/luohengstudy/p/6890395.html

1.配置

LOG_PATH=os.path.join(BASE_DIR,'log')
if not os.path.exists(LOG_PATH)os.mkdir(LOG_PATH)
LOGGING = {# version只能为1,定义了配置文件的版本,当前版本号为1.0"version": 1,# True表示禁用logger"disable_existing_loggers": False,# 格式化'formatters': {'default': {'format': '%(levelno)s %(funcName)s %(module)s %(asctime)s %(message)s '},'simple': {'format': '%(levelno)s %(module)s %(created)s %(message)s'}}, 
'handlers': {'user_handlers': {'level': 'DEBUG',# 日志文件指定为5M, 超过5m重新命名,然后写入新的日志文件'class': 'logging.handlers.RotatingFileHandler',# 指定文件大小'maxBytes': 5 * 1024,# 指定文件地址'filename': '%s/log.txt' % LOG_PATH,'formatter': 'default'},# 'uauth_handlers': {#     'level': 'DEBUG',#     # 日志文件指定为5M, 超过5m重新命名,然后写入新的日志文件#     'class': 'logging.handlers.RotatingFileHandler',#     # 指定文件大小#     'maxBytes': 5 * 1024 * 1024,#     # 指定文件地址#     'filename': '%s/uauth.txt' % LOG_PATH,#     'formatter': 'simple'# }
},
'loggers': {'user': {'handlers': ['user_handlers'],'level': 'INFO'},# 'auth': {#     'handlers': ['uauth_handlers'],#     'level': 'INFO'# }
},'filters': {}
}

2.使用

logger = logging.getLogger('user')
logger.info(日志的内容)   ----》 info级别的日志内容
logger.error(。。。。)

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

新手遇到的问题之charles代理

标题新手遇到的问题之charles代理 首先确定手机和电脑在同一个wifi下&#xff0c;之后接着往下走 步骤一&#xff1a;下载charles安装包 步骤二&#xff1a;安装charles 步骤三&#xff1a;首先打开Charles设置Charles的proxy setting&#xff0c; port一般都默认8888&…

一只会鲤鱼打挺的咸鱼翻身历程——DeanDawn_

一只会鲤鱼打挺的咸鱼翻身历程 前言&#xff1a;本篇文章字数为6331&#xff0c;字数较多&#xff0c;建议慢慢品&#xff0c;看谁能get到其中的点(本篇比较杂乱&#xff0c;个人情感抒发较多&#xff0c;心灵鸡汤也是自己苦涩泪水伤感熬出来的。害&#xff0c;原创不易&#…

Charles工具疑难杂症汇总

Charles工具疑难杂症汇总 Charles是一款很好用的抓包工具&#xff0c;但是使用Charles时会遇到各种感觉很莫名其妙的状况&#xff0c;接下来就是针对各种问题给出解决方法~ 一、为什么用charles不能抓到https的包 解决方法&#xff1a; 1、查看是否已勾选ssl功能&#xff0…

Django(缓存系统)

什么是缓存Cache 缓存是一类可以更快的读取数据的介质统称&#xff0c;也指其它可以加快数据读取的存储方式。一般用来存储临时数据&#xff0c;常用介质的是读取速度很快的内存。一般来说从数据库多次把所需要的数据提取出来&#xff0c;要比从内存或者硬盘等一次读出来付出的…

【react】配置React 的开发环境

安装之前要确认你的机器上安装了 node.js 环境包括 npm。如果没有安装&#xff0c;可以到 node.js 的官网下载自己电脑的对应的安装包来安装好环境。Node.js 安装配置菜鸟教程 node自带npm 第一种方法&#xff08;create-react-app&#xff09; 安装好环境以后&#xff0c;…

Mellel 5 for mac(文字处理软件)

Mellel 5 for mac一款非常好用的文字处理软件&#xff0c;Mellel 5版包括所有经典的文本编辑工具&#xff0c;强大&#xff0c;灵活和可靠&#xff0c;它将帮助您撰写书籍&#xff0c;学术论文或博士学位论文&#xff0c;从概述想法到完成手稿。 Mellel 5 for mac安装教程 在本…

bliss android x86,Bliss OS现在可让您基于Android-x86和AOSP在PC上运行Android 10

Bliss OS是一个基于Android-x86项目的开源操作系统&#xff0c;有望让您在任何Linux&#xff0c;Windows或Chromebook PC或平板电脑设备上运行最新的Android 10移动操作系统。 Bliss OS基于AOSP(Android开放源代码项目)和Android-x86项目&#xff0c;提供了许多自定义和主题选项…

nginx跨域步骤详情

此文章只实现在本地开发环境下的应用nginx跨域 1.下载nginx稳定版本 下载地址&#xff1a;nginx: download 2. 配置nginx文件下的nginx.conf 3. 打包 我用的react &#xff0c;打包命令是&#xff1a;npm run bulid , 把打包后的dist文件下的内容复制到下面的文件地址 4…

index.html trend.html

1.jq22模板下载&#xff1a;http://www.jq22.com/jquery-info22538 2.layUI下载&#xff08;layUI-v2.5.5&#xff09;&#xff1a;https://www.layui.com/ 3.jquery下载&#xff08;Development 3.4.1&#xff09;&#xff1a;https://jquery.com/download/ 【网页直接打开文件…

Starlink星链计划能与5G抗衡?看一下马斯克吹过的牛

文章目录 一、Starlink星链计划是什么&#xff1f;1. 卫星发射情况2. 性能测试 二、5G 通信性能1. 通信速度2.通信时延3. 速度快的主要原因4. 系统容量 三、Starlink 与 5G 的对比1. 覆盖范围2. 通信速度 四、Starlink 的优势1. 局部地区的网络服务2. 军事服务3. 未来远景 一、…

docker基础使用

docker下载centos镜像(用作配置jdk环境系统) docker pull centos #版本号可以自己加,默认拉取最新的 docker命令 docker search xxxx 搜索xxxx镜像 docker pull xxxx 下载xxxx镜像&#xff0c;版本号…

Keras--基于VGG16卷积神经网络---猫狗分类

Cats vs. Dogs&#xff08;猫狗大战&#xff09;来源于 Kaggle 上的一个竞赛&#xff0c;内容非常简单&#xff0c; Kaggle 提供了一个猫和狗的数据集&#xff0c;我们需要建立一个算法进行训练&#xff0c;最后这个算法要能准确识别出猫和狗。Kaggle 提供的数据集分为训练集…

软件欺诈的骗局揭露:“替罪羊”究竟是如何构建的?

创建一个能工作的软件产品是很困难的&#xff0c;卖欺诈性的软件产品要容易得多。 声明&#xff1a;本文已获作者Matt Stancliff翻译授权。 作者 | Matt Stancliff 译者 | 苏本如&#xff0c;责编 | 郭芮 头图 | CSDN 下载自东方 IC 出品 | CSDN&#xff08;ID&#xff1a;CSDN…

什么?我要对AI礼貌?人机交互面临的道德漏洞

作者 | 库珀 来源 | 数据实战派 头图 | 付费下载于 IC Photo 如果你在一条道路上行驶&#xff0c;突然前面拐弯处出现一辆无人驾驶汽车&#xff0c;你会继续坚持你的道路优先权&#xff0c;还是让位使它先过去&#xff1f; 目前&#xff0c;我们大多数人在涉及其他人的情况下能…

Docker安装 elasticsearch-head

目录 前言安装elasticsearch-head步骤1&#xff1a;准备1. 安装docker2. 搜索可以使用的镜像。3. 也可从docker hub上搜索镜像。4. 选择合适的redis镜像。 步骤2&#xff1a;拉取elasticsearch-head镜像拉取镜像查看已拉取的镜像 步骤3&#xff1a;创建容器创建容器方式1&#…

猿创征文|瑞吉外卖——管理端_菜品管理_1

个人名片&#xff1a; 博主&#xff1a;酒徒ᝰ. 专栏&#xff1a;瑞吉外卖 个人简介&#xff1a;沉醉在酒中&#xff0c;借着一股酒劲&#xff0c;去拼搏一个未来。 本篇励志&#xff1a;真正的程序员不看参考手册&#xff0c;新手和胆小鬼才会看。 本项目基于B站黑马程序员Jav…

【CSS】CSS 布局——常规流布局

<h1>基础文档流</h1><p>我是一个基本的块级元素。我的相邻块级元素在我的下方另起一行。</p><p>默认情况下&#xff0c;我们会占据父元素 100%的宽度&#xff0c;并且我们的高度与我们的子元素内容一样高。我们的总宽度和高度是我们的内容 内边距…

SpringBoot整合、SpringBoot与异步任务

目录 一、背景描述二、简单使用方法三、原理五、使用自定义线程池六、Async失效情况 一、背景描述 java 的代码是同步顺序执行&#xff0c;当我们需要执行异步操作时我们通常会去创建一个新线程去执行。比如new Thread()。start()&#xff0c;或者使用线程池线程池 new Thread…

stm工程文件夹

STM32工程文件构成 从下图可以看出我们的工程目录是由CORE、OBJ、STM32F10x_FWLib、USER、SYSTEM以及HARDWARE文件夹组成的。此外还有一个文本文档README.TXT、以及一个Windows 批处理文件 (.bat)keilkilll.bat。 1、CORE文件夹 CORE文件夹下一共有三个文件&#xff0c;它们分…

STL文件及其读取

1引言 STL(Stereo lithographic)文件格式是美国3D SYSTEMS公司提出的三维实体造型系统的一个接口标准&#xff0c;其接口格式规范。采用三角形面片离散地近似表示三维模型&#xff0c;目前已被工业界认为是快速成形(rapid prototypi ng)领域的标准描述文件格式。在逆向工程、有…