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 shell 整数运算 let [ ] (( )) expr以及 浮点数 bc用法(转)
Abstract : 1) Linux shell 中使用 let , [ ] ,(( )) 三种运算符操作 shell 变量进行简单的基本运算:2)Linux shell 中使用 expr 与 b ...
- 局部敏感哈希LSH
之前介绍了Annoy,Annoy是一种高维空间寻找近似最近邻的算法(ANN)的一种,接下来再讨论一种ANN算法,LSH局部敏感哈希. LSH的基本思想是: 原始空间中相邻的数据点通过映射或投影变换后, ...
- 拉普拉斯矩阵(Laplacian Matrix) 及半正定性证明
摘自 https://blog.csdn.net/beiyangdashu/article/details/49300479 和 https://en.wikipedia.org/wiki/Lapla ...
- LeetCode 622——设计循环队列
1. 题目 设计你的循环队列实现. 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环.它也被称为"环形缓冲器". 循环队列 ...
- Truffle3.0集成NodeJS并完全跑通(附详细实例,可能的错误)
Truffle3.0集成NodeJS并完全跑通(附详细实例,可能的错误) Truffle3.0集成NodeJS并完全跑通(附详细实例,可能的错误) 升级到Truffle3.0 如果之前安装的是Truf ...
- flask-sqlalchemy 用法总结
Flask-SQLAlchemy是一个Flask扩展,能够支持多种数据库后台,我们可以不需要关心SQL的处理细节,操作数据库,一个基本关系对应一个类,而一个实体对应类的实例对象.Flask是一个轻量级 ...
- [bzoj4860] [BeiJing2017]树的难题
Description 给你一棵 n 个点的无根树.树上的每条边具有颜色. 一共有 m 种颜色,编号为 1 到 m.第 i 种颜色的权值为 ci.对于一条树上的简单路径,路径上经过的所有边按顺序组成一 ...
- [Leetcode] Merge k sorted lists 合并k个已排序的链表
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 思 ...
- 安徽师大附中%你赛day6 T3 Hamsters [POI2010]CHO-Hamsters 解题报告
[POI2010]CHO-Hamsters 题意: 给出n个互不包含的字符串,要求你求出一个最短的字符串S,使得这n个字符串在S中总共至少出现m次,问S最短是多少? 范围: \(1 \le n \le ...
- 【BZOJ 1492】 [NOI2007]货币兑换Cash 斜率优化DP
先说一下斜率优化:这是一种经典的dp优化,是OI中利用数形结合的思想解决问题的典范,通常用于优化dp,有时候其他的一些决策优化也会用到,看待他的角度一般有两种,但均将决策看为二维坐标系上的点,并转化为 ...