试用 Celery
Celery
是一个「自带电池」的任务队列。它易于使用,所以你可以无视其所解决问题的复杂程度而轻松入门。它遵照最佳实践设计,所以你的产品可以扩展,或与其他语言集成,并且它自带了在生产环境中运行这样一个系统所需的工具和支持。
选择中间人
Celery
需要一个发送和接收消息的解决方案,其通常以独立服务形式出现, 称为 消息中间人 。
- RabbitMQ 功能完备、稳定、耐用,并且安装简便,是生产环境的绝佳选择。
- Redis 也是功能完备的,但更易受突然中断或断电带来数据丢失的影响。
- 不推荐把 数据库 用于消息队列,但对于很小的项目可能是合适的。你的选择包括:
SQLAlchemy
和Django Database
。 - 其他 除了上面列出的之外,还有其他的实验性传输实现可供选择,包括 Amazon SQS 、 Using MongoDB 和 IronMQ 。
- 中间人概览
安装 Celery
1 | $ pip install celery |
应用
我有一个网址,用户需要提交信息,我会给用户创建一个报告,并发送到用户的邮箱。但是,报告的创建时间需要话费10秒,有一些数据需要实时生成,有一些需要花费大量的计算时间。
所以我的解决方案是异步处理,用户先提交信息,我在报告创建完成后进行发送。
例子
tasks.py
1 | from celery import Celery |
代码解释:我们需要一个 celery 实例来启动程序,因此创建了一个名为 app 的 celery 实例。
在3个终端中启动:
第一个终端,运行 redis-server
第二个终端,运行 celery worker -A tasks -l info -c 5
,通过输出可以看到 celery
成功运行。
第三个终端,运行脚本 python tasks.py
可以看到 接受到了一个4A9D2A83-E273-40CB-***
的任务,并在8.2秒后执行完成,返回的结果是 10040。
The Why·Liam·Blog by WhyLiam is licensed under a Creative Commons BY-NC-ND 4.0 International License.
由WhyLiam创作并维护的Why·Liam·Blog采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。
本文首发于Why·Liam·Blog (https://blog.naaln.com),版权所有,侵权必究。
本文永久链接:https://blog.naaln.com/2016/06/try-celery/