异步任务利器Celery(一)介绍
来源:互联网 发布:自动编程 编辑:程序博客网 时间:2024/06/05 10:46
django项目开发中遇到过一些问题,发送请求后服务器要进行一系列耗时非常长的操作,用户要等待很久的时间。可不可以立刻对用户返回响应,然后在后台运行那些操作呢?
crontab定时任务很难达到这样的要求 ,异步任务是很好的解决方法,有一个使用python写的非常好用的异步任务工具Celery。
broker、worker和backend
Celery的架构由三部分组成,消息中间件(broker),任务执行单元(worker)和任务执行结果存储(result backends)组成。
应用程序调用Celery的时候,会向broker传递消息,而后worker将会取到消息,对程序进行执行,backend用于存储这些消息以及Celery执行的结果。
消息中间件broker
Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。
RabbitMQ是最好的消息中间件,使用方法如下:
Using RabbitMQ
Redis也是可行的,虽然有信息丢失的风险:
Using Redis
其余broker Broker Overview。
任务执行单元worker
Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。
任务结果存储backend
用来存储Worker执行的任务的结果:SQLAlchemy/Django ORM, Memcached, Redis, RPC (RabbitMQ/AMQP)。
下载
下载Celery很简单:
$ pip install celery
这里使用Redis作为broker实践一下,需要额外的库支持,可以一起下载:
$ pip install -U "celery[redis]"
写应用程序
写一个简单的应用tasks.py:
from celery import Celeryapp = Celery('tasks', broker='redis://localhost:6379/0')@app.taskdef add(x, y): return x + y
运行worker
在命令行中运行:
$ celery -A tasks worker --loglevel=info
输出如下:
[2017-09-10 06:59:58,665: INFO/MainProcess] Connected to redis://localhost:6379/0[2017-09-10 06:59:58,671: INFO/MainProcess] mingle: searching for neighbors[2017-09-10 06:59:59,688: INFO/MainProcess] mingle: all alone[2017-09-10 06:59:59,724: INFO/MainProcess] celery@ubuntu ready.
发送任务
进入python环境:
>>> from tasks import add>>> add.delay(4, 4)
worker里就可以看到任务处理的消息:
[2017-09-10 07:02:34,874: INFO/MainProcess] Received task: task.add[40ec89c8-0a23-4a26-9da0-7f418c50f4cb] [2017-09-10 07:02:34,876: INFO/ForkPoolWorker-1] Task task.add[40ec89c8-0a23-4a26-9da0-7f418c50f4cb] succeeded in 0.000579041981837s: 8
存储结果
使用Redis作为存储backend,在tasks.py中修改:
app = Celery('tasks', backend='redis://localhost:6379/0', broker='redis://localhost:6379/0')
运行后就可以查看结果了:
>>> from task import add>>> r=add.delay(3,4)>>> r.result7>>> r.ready()True>>> r.get(timeout=1)7
可以查看Redis中的存储:
127.0.0.1:6379> get celery-task-meta-f2032d3e-f9a0-425d-bce4-f55ce58c8706"{\"status\": \"SUCCESS\", \"traceback\": null, \"result\": 7, \"task_id\": \"f2032d3e-f9a0-425d-bce4-f55ce58c8706\", \"children\": []}"127.0.0.1:6379>
超级简单,想要对Celery做更进一步的了解,请参考官方文档。
- 异步任务利器Celery(一)介绍
- 异步任务利器Celery(一)介绍
- 任务调度利器:Celery
- 任务调度利器:Celery
- 任务调度利器-Celery
- 任务调度利器:Celery
- 异步任务利器Celery(二)在django项目中使用Celery
- celery 异步任务队列
- 异步任务神器 Celery
- 异步任务神器 Celery
- Django中异步任务celery
- 异步任务 Celery 简明笔记
- 安装使用celery异步任务
- Python Celery 实现异步任务
- Celery分布式异步框架介绍
- django下使用celery进行异步任务
- Django之celery分布式异步任务队列
- Django 使用celery做异步任务处理
- 设计模式之禅—23种设计模式详解_1 单例模式
- http协议,请求报文,响应报文格式思维导图
- python-
- 面试题39(2). 判断是否为平衡二叉树
- (CSU
- 异步任务利器Celery(一)介绍
- angular表格排序(查询)
- 动态内存管理和智能指针 2.0 -- shared_ptr
- 什么时候用相对定位或绝对定位
- 设计模式之策略模式-Strategy Pattern
- 【2017 ACM/ICPC Asia Regional Shenyang Online 1004】hdu 6197 array array array
- C#day2
- Python continue 语句
- Linux文件权限