zoukankan      html  css  js  c++  java
  • Flask实战第66天:celery实现异步任务

    Celery文档:http://docs.celeryproject.org

    Celery 通过消息进行通信,用专用的工作线程不断监视任务队列以执行新工作。

    Celery需要消息传输来发送和接收消息。RabbitMQ和Redis代理传输功能齐全,但也支持无数其他实验解决方案,这里我们选择redis.

    下面我们开始写个demo来演示怎么使用它。

      安装redis, 地址: 10.2.2.120:6379

      安装celery

    pip install celery

      在windows操作系统上还要安装eventlet 

    pip install eventlet

      安装redis插件

    pip install redis

    新建个纯python环境:

    tasks.py用来配置任务的, main.py 用来执行

    编辑tasks.py

    # task:任务
    # broker(中间人):存储任务的队列
    # worker:真正执行任务的工作者
    # backend:用来存储任务执行后的结果
    
    from celery import Celery
    import time
    
    celery = Celery("tasks",
                    broker="redis://10.2.2.120:6379/0",
                    backend="redis://10.2.2.120:6379/0")
    
    @celery.task   #加上此装饰器,这个函数就变成celery任务了(task)
    def send_mail():
        print('邮件开始发送....')
        time.sleep(10)
        print('邮件发送结束!')

    编辑main.py

    from tasks import send_mail
    
    if __name__ == '__main__':
        send_mail.delay()     #这样调用,就会变成异步任务了,不会被阻塞

    然后我们在 项目目录启动 worker来监听任务

    在Linux系统中是不需要制定 --pool的

    (bbs) D:celery_demo>celery -A tasks.celery --pool=eventlet worker --loglevel=info

    执行main.py来触发任务,结果会发现,main.py会立马执行结束,并不会被阻塞在那里等待10s

    下面是我连续执行两次main.py的结果

  • 相关阅读:
    原生开发、H5开发和混合开发的区别?
    html5:FileAPI 文件操作实战
    web前端是编程语言中更新迭代最快的
    HTTP请求过程
    CSS :placeholder-shown伪类实现Material Design占位符交互效果
    Css中bem书写规范
    全栈开发者意味着什么?
    利用canvas实现转盘抽奖
    12种开源Web安全扫描程序
    移动端适配必须掌握的基本概念和适配方案
  • 原文地址:https://www.cnblogs.com/sellsa/p/9757569.html
Copyright © 2011-2022 走看看