celery 任务队列 + redis

Celery 是一个“自带电池”的的任务队列。它易于使用,因此你能够无视其所解决问题的复杂程度而轻松入门。它遵守最佳实践设计,因此你的产品能够扩展,或与其余语言集成,而且它自带了在生产环境中运行这样一个系统所需的工具和支持。html

在此教程中,你会了解使用 Celery 的最基础部分。包括:python

  • 选择和安装消息传输方式(中间人)。
  • 安装 Celery 并建立第一个任务
  • 运行职程并调用任务。
  • 追踪任务在不一样状态间的迁移,并检视返回值。

选择中间人

  Celery 须要一个发送和接收消息的解决方案,其一般以独立服务形式出现, 称为 消息中间人 。redis

  在此介绍redis数据库   安装数据库请看另外一篇文章:https://www.cnblogs.com/wbdream/p/10581310.html数据库

安装celery:app

  安装celery接口: pip3 install celeryasync

应用:ide

首先你须要一个 Celery 实例,称为 Celery 应用或直接简称应用。既然这个实例用于你想在 Celery 中作一切事——好比建立任务、管理职程——的入口点,它必须能够被其余模块导入。工具

在此教程中,你的一切都容纳在单一模块里,对于更大的项目,你会想建立 独立模块 。ui

让咱们建立 tasks.py :spa

  

from celery import Celery

app = Celery('tasks', broker='redis://:password@localhost//')

@app.task
def add(x, y):
    return x + y

Celery 的第一个参数是当前模块的名称,这个参数是必须的,这样的话名称能够自动生成。第二个参数是中间人关键字参数,指定你所使用的消息中间人的 URL,此处使用了 RabbitMQ,也是默认的选项。更多可选的中间人见上面的 选择中间人 一节。例如,对于 RabbitMQ 你能够写 amqp://localhost ,而对于 Redis 你能够写 redis://localhost .

你如今能够用 worker 参数执行咱们的程序:

  $ celery -A tasks worker -l debug # -l debug 日志级别

调用任务

你能够用 delay() 方法来调用任务。

这是 apply_async() 方法的快捷方式,该方法容许你更好地控制任务执行(见 Calling Tasks ):

>>> from tasks import add >>> res = add.delay(4, 4)
>>> res.get() #获取结构

ready() 方法查看任务是否完成处理:

>>> result.ready() False

假若任务抛出了一个异常, get() 会从新抛出异常, 但你能够指定 propagate 参数来覆盖这一行为:

>>> result.get(propagate=False) 

若是任务抛出了一个异常,你也能够获取原始的回溯信息:

>>> result.traceback 
相关文章
相关标签/搜索