Celery是一个功能完备即插即用的任务队列。它使得我们不需要考虑复杂的问题,使用非常简单。celery看起来似乎很庞大。celery适用异步处理问题,当发送邮件、或者文件上传, 图像处理等等一些比较耗时的操作,我们可将其异步执行,这样用户不需要等待很久,提高用户体验。 celery的特点是:

  简单,易于使用和维护,有丰富的文档。

  高效,单个celery进程每分钟可以处理数百万个任务。

  灵活,celery中几乎每个部分都可以自定义扩展。

celery非常易于集成到一些web开发框架中。

任务队列是一种跨线程、跨机器工作的一种机制。

任务队列中包含称作任务的工作单元。有专门的工作进程持续不断的监视任务队列,并从中获得新的任务并处理。

celery通过消息进行通信,通常使用一个叫Broker(中间人)来协client(任务的发出者)和worker(任务的处理者). clients发出消息到队列中,broker将队列中的信息派发给worker来处理。

一个celery系统可以包含很多的worker和broker,可增强横向扩展性和高可用性能。

安装celery

pip install -U Celery

celery支持多种消息中介

其中最完备的是RabbitMQ和Redis。

pip install -U flower #安装任务监控工具

usage: celery <command> [options]

可选参数

Global Options:
-A APP, --app APP
-b BROKER, --broker BROKER
--result-backend RESULT_BACKEND
--loader LOADER
--config CONFIG
--workdir WORKDIR
--no-color, -C
--quiet, -q

具体实现简单的任务,我这里使用的rabbitmq作为borker

#addtask.py
from celery import Celery app = Celery("addtask",borker="amqp://admin:admin@localhost//") #使用rabbitmq @app.task
def add(x,y):
return x + y

第二个脚本

#run.py
import addtask if __name__ == "__main__":
result = addtask.add.delay(5,5)
#delay是apply_async()方法的快件方式让我们更好的执行任务。
#my_task.apply_async((2, 2), queue='my_queue', countdown=10) 任务my_task将会被发送到my_queue队列中,并且在发送10秒之后执行
print(result) #result.result 获取结果
运行celery服务
celery -A addtask worker --loglevel=info
使用redis
#tasks.py
from celery import Celery # 我们这里案例使用redis作为broker
app = Celery('demo', broker='redis://:332572@127.0.0.1/1') # 创建任务函数
@app.task
def my_task():
print("任务函数正在执行....")
celery -A tasks worker --loglevel=info
#run.py
import tasks from tasks import my_task
my_task.delay()
使用Redis作为存储结果的方案,任务结果存储配置我们通过Celery的backend参数来设定。我们将tasks模块修改如下:

from celery import Celery

# 我们这里案例使用redis作为broker
app = Celery('demo',
backend='redis://:332572@127.0.0.1:6379/2',
broker='redis://:332572@127.0.0.1:6379/1') # 创建任务函数
@app.task
def my_task(a, b):
print("任务函数正在执行....")
return a + b

配置celery

通过APP配置celery

from celery import Celery
app = Celery('demo')
# 增加配置
app.conf.update(
result_backend='redis://:332572@127.0.0.1:6379/2',
broker_url='redis://:332572@127.0.0.1:6379/1',
)

转有配置文件

下面我们在tasks.py模块 同级目录下创建配置模块celeryconfig.py:
result_backend = 'redis://:332572@127.0.0.1:6379/2'
broker_url = 'redis://:332572@127.0.0.1:6379/1'

tasks.py

from celery import Celery
import celeryconfig # 我们这里案例使用redis作为broker
app = Celery('demo') # 从单独的配置模块中加载配置
app.config_from_object('celeryconfig')

最新文章

  1. 关于成为Java高级工程师之路
  2. Bitmap在Java中的实现和应用
  3. 获取ip
  4. MySQL(五) —— 子查询
  5. [转]GIT PUSH Error 403的解决方法
  6. 【ZOJ】【3329】One Person Game
  7. 怎么利用SQL语句查询数据库中具体某个字段的重复行
  8. C#控制台输入
  9. [.Net MVC] 使用SQL Server数据库代替LocalDb
  10. 基于fiddler的APP抓包及服务端模拟
  11. HTML基本文件, CSS基础
  12. 201521123101 《Java程序设计》第1周学习总结
  13. 使用Spring框架实现用户登录实例
  14. EDKII Build Process:EDKII项目源码的配置、编译流程[三]
  15. Java中,尽量相信自己,使用自己写的方法,不要使用底层提供的方法。都是坑。
  16. input实现上传
  17. 2017-11-07 中文代码示例之Angular入门教程尝试
  18. February 20th, 2018 Week 8th Tuesday
  19. Hadoop重新格式化HDFS的方法
  20. (第十三周)评论Final发布II

热门文章

  1. Linux及Windows安装Redis(详细)
  2. JAVA实现扫描线算法
  3. C语言 二叉树的遍历(递归和非递归)
  4. selenium学习-拖拽页面元素
  5. 2017.12.21 学习vue的新得
  6. java常用类Time
  7. 【Java必修课】HashMap性能很好?问过我EnumMap没
  8. SpringBoot正确打日志的姿势
  9. 【Java必修课】String.intern()原来还能这么用(原理与应用)
  10. CSPS模拟 95