python--celery
有些时候我们的一些任务比较耗时,比如我们写了一个网站,用户注册的时候需要发送邮件。但是发送邮件的过程比较耗时,用户必须要等到我们将邮件发送成功之后才会得到响应。那么有没有一种办法,当用户点击发送邮件的时候,我们立即返回邮件已经发送成功呢?不需要等到邮件发送成功之后再返回,而是发送的同时就返回。
答案是可以的,可以使用celery来实现,celery的架构如下图所示,celery相当于是一个指挥官,真正干活的是下面四个组件。
task:我们需要执行的任务
broker:redis,rabbitMQ等消息队列,celery会将task扔进broker里面,进行排队,统一管理
worker:干活的人,celery会从broker当中取出task交给worker去执行
backend:保存任务的执行结果
我们是在windows上进行演示,所以还需要eventlet这个任务调度框架,pip install eventlet即可
''' tasks.py,存储任务 ''' from celery import Celery import time # main:当前的py文件名 # broker:中间人,比如redis,指定方式redis://:password@host:port/db,我们这里没有密码,直接redis://localhost:6379/0即可 # backend:结果存储的位置 celery = Celery(main="tasks", broker="redis://localhost:6379/0", backend="redis://localhost:6379/0") # 创建任务,模拟发送邮件。 # 如何变成任务呢?只需要加上一个装饰器,就变成了一个任务 @celery.task def send_mail(): print("邮件开始发送。。。。。") time.sleep(3) print("邮件发送结束。。。。。")
''' main.py,运行任务 ''' from tasks import send_mail import time if __name__ == '__main__': start = time.time() # 这个时候不能直接执行send_mail(),而是要使用delay方法 send_mail.delay() # 我们在tasks.py中定义的send_mail函数中,有time.sleep(5),但是send_mail.delay()是不会管的 # 会瞬间执行完毕 end = time.time() print(end - start)
已经启动成功了
我们来执行一下main.py,可以瞬间执行,同时在终端会打印出结果。这里就不再演示了,因为celery原码有问题,在下一个版本应该会修复
python--celery的更多相关文章
- python celery + redis
redis http://debugo.com/python-redis celery http://docs.jinkan.org/docs/celery/getting-started/intro ...
- python celery多worker、多队列、定时任务
python celery多worker.多队列.定时任务
- python—Celery异步分布式
python—Celery异步分布式 Celery 是一个python开发的异步分布式任务调度模块,是一个消息传输的中间件,可以理解为一个邮箱,每当应用程序调用celery的异步任务时,会向brok ...
- Python Celery队列
Celery队列简介: Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery. 使用 ...
- python celery任务分发
<div id="cnblogs_post_body" class="blogpost-body"><p>Celery是由Python开 ...
- python celery 多work多队列
1.Celery模块调用 既然celery是一个分布式的任务调度模块,那么celery是如何和分布式挂钩呢,celery可以支持多台不通的计算机执行不同的任务或者相同的任务. 如果要说celery的分 ...
- Python—Celery 框架使用
一.Celery 核心模块 1. Brokers brokers 中文意思为中间人,在这里就是指任务队列本身,接收生产者发来的消息即Task,将任务存入队列.任务的消费者是Worker,Brokers ...
- python celery 异步学习
1.运行redis 2.安装celery:pip install celery[redis] 3.vim task.py import time from celery import Celery b ...
- python celery 时区&结果(性能)的坑
本文主要介绍最近使用celery遇到的两个坑.关于时区,以及是否保留结果(celery使用rabbitmq). 先说结论:定时任务记得配置时区:丢弃结果对使用rabbitmq对celery来说,性能提 ...
- python celery rabbitmq--- pypi image from ustc
https://lug.ustc.edu.cn/wiki/mirrors/help/pypi 那么为啥要用celery ?(http://xiaorui.cc/2014/11/16/celery-ra ...
随机推荐
- [Linux] 服务器镜像定时备份解决方案 crontab+rsync+flock
两台服务器定时同步文件解决方案: 环境: 主机:192.168.1.1 镜像机:192.168.1.2 需要将主机内容备份至镜像机(假设用户都为root) 备份内容为 /export 目录下所有内容至 ...
- Tensorflow多线程输入数据处理框架
Tensorflow提供了一系列的对图像进行预处理的方法,但是复杂的预处理过程会减慢整个训练过程,所以,为了避免图像的预处理成为训练神经网络效率的瓶颈,Tensorflow提供了多线程处理输入数据的框 ...
- Linux 远程主机安全配置
开启了新的 Linux 服务器后,首要任务是做安全配置. 首先更新: # ubuntu sudo apt-get update # 获取 apt 源的软件列表 sudo apt-get upgrade ...
- Go基础篇【第8篇】: 内置库模块 bytes [一]
bytes包实现了操作[]byte的常用函数.本包的函数和strings包的函数相当类似. func Compare func Compare(a, b []byte) int Compare函数返回 ...
- redis安装与启动
安装简介: 在安装redis前需要了解redis官方发布时的版本规则,redis官方约定次版本号(即第一个小数点后的数字)为偶数的版本是稳定版(如2.8版,3.0版),奇数版本则为非稳定版本(如2.7 ...
- io学习2-磁盘阵列RAID
磁盘阵列 RAID(Redundant ArrayOf Inexpensive Disks) 如果你是一位数据库管理员或者经常接触服务器,那对RAID应该很熟悉了,作为最廉价的存储解决方案,RAID早 ...
- PTA循环,函数,数组作业
PTA循环实验作业 题目一:统计素数并求和 ### 1.PTA提交列表 2.设计思路(+流程图) 先定义变量(包含素数区间,循环次数,除数,素数个数记录和和的记录) 输入范围 一重循环:循环提取自然数 ...
- el-checkbox根据是否被选中执行不同的操作
直接给el-checkbox绑定点击事件是没有效果的,因为它会被解析成其他形式的html,el-checkbox只是一个类名,因此,使用ts和jquery动态绑定事件: mounted() { $(& ...
- [剑指Offer] 29.最小的K个数
[思路1]全排序(快排)之后取出前K个数.O(K+nlogn) class Solution { public: vector<int> GetLeastNumbers_Solution( ...
- CKEditor的基本使用
<%@ taglib prefix="html" uri="http://struts.apache.org/tags-html" %> <% ...