celery

Django+celery+redis 异步发送邮件功能

梦想的初衷 提交于 2020-04-28 05:46:23
系统==win10 Django==2.1 redis== 3.2.0 celery==4.2.1 由于目前是在开发过程中,所以测试环境为win10。 开发需求:当用户在页面点击“下载时”,系统会通过用户session获取用户邮箱,使用系统设置的邮箱发送给用户包含指定文件的邮件。 问题1:views.py中,除非系统将邮件已成功发送,才会return页面给用户,由于文件大小和网络环境的问题,发送时间可能较长,不可能让用户长时间等待。 问题2:系统发送邮件的主进程进行时,用户和其他人都无法做新的操作。 解决办法:使用celery将发送邮件的任务转成异步执行,无需用户等待。使用redis作为队列,将异步任务进行缓存。不影响服务器主进程。 开始解决之路: 部署环境 pip3 install redis (这里首先需要下载redis安装,下载链接 https://github.com/MicrosoftArchive/redis/releases ,进入后下载 Redis-x64-3.2.100.zip ),启动命令: 进入解压后的文件 输入:redis-server.exe redis.windows.conf pip3 install celery 目录结构见下图: 将创建两个py文件,tasks.py和celery.py。 tasks.py 内容 from django.conf

django+celery+redis应用

☆樱花仙子☆ 提交于 2020-04-28 05:46:05
一、celery介绍   1、应用场景     a. Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理,如果你的业务场景中需要用到异步任务,就可以考虑使用celery      b. 你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让你的程序等着结果返回,而是给你返回 一个任务ID, 你过一段时间只需要拿着这个任务id就可以拿到任务执行结果, 在任务执行ing进行时,你可以继续做其它的事情     c. Celery 在执行任务时需要通过一个消息中间件来接收和发送任务消息,以及存储任务结果, 一般使用rabbitMQ or Redis   2、redis的优点     a. 简单:一单熟悉了celery的工作流程后,配置和使用还是比较简单的     b. 高可用:当任务执行失败或执行过程中发生连接中断,celery 会自动尝试重新执行任务     c. 快速:一个单进程的celery每分钟可处理上百万个任务     d. 灵活: 几乎celery的各个组件都可以被扩展及自定制   3. celery的工作流程           user: 用户程序,用于告知celery去执行一个任务。      broker: 存放任务(依赖RabbitMQ或Redis,进行存储)      worker: 执行任务   4

django+celery+redis错误

旧时模样 提交于 2020-04-28 05:45:51
python——3.7 django——2.1 centos——7 redis——4.0.6 celery——4.3 1、配置redis.conf文件 celery和redis在centos虚拟机上, 所以redis需要设置远程连接 注释#127.0.0.1表示为任何ip地址可以访问 修改为no表示关闭安全模式 daemonize表示守护进程,默认为no需改为yes 错误1: error) DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients, In thi mode connections are only accepted from the loopback interface. If you want to connec from external computers to Redis you may adopt one of the following solutions: 1 ) Jus.disable protected mode sending the command 'CONEIG SET

python使用redis和celery

ⅰ亾dé卋堺 提交于 2020-04-28 05:44:38
redis数据库 # 1.安装redis与可视化操作工具 # 选择安装路径、圈中默认配置环境变量 # 2.在服务中管理redis服务器的开启关闭 # 3.命令行简单使用redis: -- redis-cli # 启动客户端 -- set key value # 设置值 -- get key # 取出值 # 4.redis支持:字符串、字典、列表、集合、有序集合 # https://www.runoob.com/redis/redis-tutorial.html # 5.特点:可持久化、单线程单进程并发、内存中的数据库(效率高) python使用redis 依赖 >: pip3 install redis 直接使用 import redis r = redis.Redis(host='127.0.0.1', port=6379) 连接池使用 import redis pool = redis.ConnectionPool(host='127.0.0.1', port=6379) r = redis.Redis(connection_pool=pool) 缓存使用 安装django依赖 pip install django-redis # 1.将缓存存储位置配置到redis中:settings.py CACHES = { "default": { "BACKEND": "django

Django的celery配置(包括定时任务、队列)

女生的网名这么多〃 提交于 2020-04-28 05:44:19
一、安装celery Django项目不需要安装celery这个包,可以直接使用django-celery这个包,,先来安装它,在终端中输入: pip install django-celery 二、安装rabbitmq,建立celery队列 我做的项目用的就是rabbitmq,按道理来说,也是可以用redis作为消息队列的,但是rabbitmq更好,此处不做详细解释,有兴趣的同学的可以去研究下。 ubuntu环境下,在终端中输入: sudo apt-get install rabbitmq-server 三、配置settings.py 首先要在INSTALLED_APPS中添加对djcelery的引用 INSTALLED_APPS = [ 'decelery', ] 再在settings.py中添加以下代码 import djcelery djcelery.setup_loader() BROKER_URL = 'amqp://guest:guest@localhost:5672/' CELERY_RESULT_BACKEND = 'amqp' CELERY_IMPORTS = ( "common.tasks.task1", "common.tasks.task2", ) 四、添加celery异步任务 在common/tasks/task1.py中添加以下代码

Django websocket之web端实时查看日志实践案例

…衆ロ難τιáo~ 提交于 2020-04-28 05:14:25
这是Django Channels系列文章的第二篇,以web端实现tailf的案例讲解Channels的具体使用以及跟Celery的结合 通过上一篇 《Django使用Channels实现WebSocket--上篇》 的学习应该对Channels的各种概念有了清晰的认知,可以顺利的将Channels框架集成到自己的Django项目中实现WebSocket了,本篇文章将以一个Channels+Celery实现web端tailf功能的例子更加深入的介绍Channels 先说下我们要实现的目标:所有登录的用户可以查看tailf日志页面,在页面上能够选择日志文件进行监听,多个页面终端同时监听任何日志都互不影响,页面同时提供终止监听的按钮能够终止前端的输出以及后台对日志文件的读取 最终实现的结果见下图 接着我们来看下具体的实现过程 技术实现 所有代码均基于以下软件版本: python==3.6.3 django==2.2 channels==2.1.7 celery==4.3.0 celery4在windows下支持不完善,所以请 在linux下运行 测试 日志数据定义 我们只希望用户能够查询固定的几个日志文件,就不是用数据库仅借助settings.py文件里写全局变量来实现数据存储 在settings.py里添加一个叫 TAILF 的变量,类型为字典,key标识文件的编号

django-celery的集成开发

a 夏天 提交于 2020-04-28 05:14:14
django-celery的集成开发 celery 特点 celery 简单、灵活、可靠的分布式系统 处理异步任务队列 支持任务调度 celery 的组成 消息中间件 worker task store 在django中使用celery pip install django-celery pip install celery-with-redis pip install eventlet pip install --upgrade https://github.com/celery/celery/tarball/master 在 settings.py 中 配置 celery 相关的配置 CELERY_BROKER_URL = 'redis://127.0.0.1:6379/6' redis带密码情况CELERY_BROKER_URL = 'redis://:123456@127.0.0.1:6379/3' CELERY_ACCEPT_CONTENT = ['json'] CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/7' ELERY_TASK_SERIALIZER = 'json' 在 settings.py 配置文件所在的包下、新建一个 celerys.py from celery import Celery import os

Celery框架 接口缓存, Celery框架, Django项目实现轮播图缓存更新

a 夏天 提交于 2020-04-28 05:09:06
接口缓存 """ 1)什么是接口的后台缓存 前台访问后台接口,后台会优先从缓存(内存)中查找接口数据 如果有数据,直接对前台响应缓存数据 如果没有数据,与(mysql)数据库交互,得到数据,对前台响应,同时将数据进行缓存,以备下次使用 了解:前台缓存 - 前台在请求到接口数据后,在前台建立缓存,再发送同样请求时,发现前台缓存有数据,就不再对后台做请求了 2)什么的接口会进行接口缓存 i)接口会被大量访问:比如主页中的接口,几乎所有人都会访问,而且会重复访问 ii)在一定时间内数据不会变化(或数据不变化)的接口 iii)接口数据的时效性不是特别强(数据库数据发生变化了,不是立即同步给前台,验后时间同步给前台也没事) 注:理论上所有接口都可以建立缓存,只要数据库与缓存数据同步及时 3)如何实现接口缓存:主页轮播图接口 """ Celery框架 独立进程,独立线程 官方 Celery 官网: http://www.celeryproject.org/ Celery 官方文档英文版: http://docs.celeryproject.org/en/latest/index.html Celery 官方文档中文版: http://docs.jinkan.org/docs/celery/ Celery异步任务框架 """ 1)可以不依赖任何服务器,通过自身命令,启动服务(内部支持socket

网站搭建 (第17天) Celery定时刷新缓存

纵饮孤独 提交于 2020-04-28 05:08:51
一、前言   当网站使用redis缓存时,就会涉及到缓存的过期时间,redis数据库中的内容就会消失。这个时候进行用户操作又会变慢,所以要采用一种办法,当缓存刚好要过期时,能够使得redis数据库自动对缓存内容进行更新。这个办法就是使用 celery,具体配置及使用我已经先在 Django框架17: Celery的使用 中总结完毕,一般按着步骤实现就可以了,这里我只将定时刷新的功能实现一下。 二、使用方法   按照 Django框架17: Celery的使用 配置好后,在需要添加任务的app/tasks.py添加: from __future__ import absolute_import from celery import shared_task from read_statistics.utils import * @shared_task def get_post_list(): """ 缓存博客列表 """ post_list = Post.objects.filter(Q(display=0) | Q(display__isnull=True)) # 30*60表示30秒*60,也就是半小时 cache.set('post_list', post_list, 30 * 60) @shared_task def get_new_publish(): """

Celery无法注册任务的几种情况

↘锁芯ラ 提交于 2020-04-28 05:08:21
Celery处理异步任务使得程序不必等待任务结束就可以继续执行其它任务或返回数据结果, 在处理耗时任务如发送邮件、发送信息验证码等场景下非常适用! Celery使用方法灵活,根据具体业务有不同的部署和使用方法,经常会遇到的一个问题:在使用命令启动Celery时,任务没有注册或其它错误,导致无法正常调用Celery,这里举例几种常见的情况,说明错误和解决方案,供大家参考! 1.版本问题 在Linux和window中或Django和Flask中使用Celery,版本不同或扩展插件不同(如django-celery 3.3.0 djangocelery 0.1.1 Flask-Celery 2.4.3 Flask-Celery3 celery 4.3.0 等等)会导致无法使用Celery!笔者使用Flask框架配合celery 4.3.0版本,使用正常! ———————————————— 2.没有注册tasks 如下图代码,如果没有添加任务到Celery的autodiscover_tasks方法中,同样也是不会有作用的! """启动文件""" from celery import Celery from celery_tasks import celeryconfig # 定义celery app:名称 celery_app = Celery("YOYO") # 加载配置 celery