Flask实战第66天:celery实现异步任务
2024-10-20 19:01:48
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的结果
最新文章
- Redhat/Ubuntu/Windows下安装Docker
- HTML5 十大新特性(九)——Web Storage
- CC2540中的电压检测
- 每天一个linux命令(17):whereis 命令
- Scalaz(21)-类型例证:Liskov and Leibniz - type evidence
- jQuery里ajax的用法
- 读《深入理解Java虚拟机》有感——第一部分:Class文件的结构
- C Primer Plus之高级数据表示
- HDU 4749-Parade Show(KMP变形)
- 我的第一个javascript网页作业
- 無心插柳的Linux學習者代言人——蔡德明
- CodeForces 940E
- springcloud分布式事务终极探讨
- bzoj 2599
- 循环结构while
- j2ee课程设计—基于activiti的请休假系统
- 【SDOI2008】仪仗队
- 站在DevOps肩膀上的TestOps(一)
- socket.io框架
- linux 常用清理或备份文件命令