有些时候我们的一些任务比较耗时,比如我们写了一个网站,用户注册的时候需要发送邮件。但是发送邮件的过程比较耗时,用户必须要等到我们将邮件发送成功之后才会得到响应。那么有没有一种办法,当用户点击发送邮件的时候,我们立即返回邮件已经发送成功呢?不需要等到邮件发送成功之后再返回,而是发送的同时就返回。

答案是可以的,可以使用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的更多相关文章

  1. python celery + redis

    redis http://debugo.com/python-redis celery http://docs.jinkan.org/docs/celery/getting-started/intro ...

  2. python celery多worker、多队列、定时任务

    python celery多worker.多队列.定时任务  

  3. python—Celery异步分布式

    python—Celery异步分布式 Celery  是一个python开发的异步分布式任务调度模块,是一个消息传输的中间件,可以理解为一个邮箱,每当应用程序调用celery的异步任务时,会向brok ...

  4. Python Celery队列

    Celery队列简介: Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery. 使用 ...

  5. python celery任务分发

    <div id="cnblogs_post_body" class="blogpost-body"><p>Celery是由Python开 ...

  6. python celery 多work多队列

    1.Celery模块调用 既然celery是一个分布式的任务调度模块,那么celery是如何和分布式挂钩呢,celery可以支持多台不通的计算机执行不同的任务或者相同的任务. 如果要说celery的分 ...

  7. Python—Celery 框架使用

    一.Celery 核心模块 1. Brokers brokers 中文意思为中间人,在这里就是指任务队列本身,接收生产者发来的消息即Task,将任务存入队列.任务的消费者是Worker,Brokers ...

  8. python celery 异步学习

    1.运行redis 2.安装celery:pip install celery[redis] 3.vim task.py import time from celery import Celery b ...

  9. python celery 时区&结果(性能)的坑

    本文主要介绍最近使用celery遇到的两个坑.关于时区,以及是否保留结果(celery使用rabbitmq). 先说结论:定时任务记得配置时区:丢弃结果对使用rabbitmq对celery来说,性能提 ...

  10. 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 ...

随机推荐

  1. PAT——乙级1015/甲级1062:德才论

    这两个题是一模一样的 1015 德才论 (25 point(s)) 宋代史学家司马光在<资治通鉴>中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德 ...

  2. 核方法(Kernel Methods)

    核方法(Kernel Methods) 支持向量机(SVM)是机器学习中一个常见的算法,通过最大间隔的思想去求解一个优化问题,得到一个分类超平面.对于非线性问题,则是通过引入核函数,对特征进行映射(通 ...

  3. Daily Scrum02 12.03

    Daily Scrum03 12.03 一天过去了,新的一天即将到来,我们组仍旧干劲十足呢~ Member Today's Task Tomorrow's Task 李孟 孟神有点累了呢 task85 ...

  4. c#程序中的AssemblyInfo.cs

    在asp.net中有一个配置文件AssemblyInfo.cs主要用来设定生成的有关程序集的常规信息dll文件的一些参数,下面是默认的AssemblyInfo.cs文件的内容具体介绍 //是否符合公共 ...

  5. javascript实现自动切换焦点功能学习

    当用户在表单中填写完当前字段后,能否自动将焦点跳转到下一个字段以方便用户输入? 为了增强易用性,加快数据输入的速度,可以在前一个文本框中的字符达到一定的设置的字符长度后(比如电话号码,身份证号等),用 ...

  6. LTE/EPC中,MME怎么找到UE的HSS的?

    http://bbs.c114.net/forum.php?mod=viewthread&tid=486247 HSS---归属用户服务器,我的理解:一般来说只有一个,或者是一个分布式数据库. ...

  7. 在vue-cli创建的项目里配置scss

    第一步,gitbash进入到项目目录 npm install node-sass --save-dev npm install sass-loader --save-dev 第二步:打开webpack ...

  8. [剑指Offer] 41.和为S的连续正数序列

    题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他 ...

  9. OSCache页面缓存的使用

    完成项目时,为了减少对数据库的频繁操作,引出了缓存,缓存分为以下几种: 1.一级缓存 一级缓存的存储域是session,作用于单个的dao 2.二级缓存 二级缓存的存储域是sessionFactory ...

  10. java实现分页功能的类

    package smn.util; public class Pager { private int pageNow; private int pageSize=4; private int tota ...