### 导航
- [索引](# "总目录")
- [下一页](# "部署选择") |
- [上一页](# "请求内容校验码") |
- [Flask 0.10.1 文档](#) »
- [Flask 代码模式](#) »
# 基于 Celery 的后台任务
Celery 是一个 Python 的任务队列,包含线程/进程池。曾经有一个 Flask 的集成,但在 Celery 3 重构了内部细节后变得不必要了。本指导补充了如何妥善在 Flask中使用 Celery 的空白,但假设你已经读过了 Celery 官方文档中的教程[使用 Celery 的首要步骤](http://docs.celeryproject.org/en/master/getting-started/first-steps-with-celery.html) [http://docs.celeryproject.org/en/master/getting-started/first-steps-with-celery.html]
### 安装 Celery
Celery 提交到了 Python Package Index (PyPI),所以可以通过标准 Python 工具pip 或 easy_install 安装:
~~~
$ pip install celery
~~~
### 配置 Celery
你需要的第一个东西是一个 Celery 实例,称为 Celery 应用。仅就 Celery 而言其与 Flask 中的 [Flask](# "flask.Flask") 对象有异曲同工之妙。因为这个实例用于你在 Celery 中做任何事——诸如创建任务和管理职程(Worker)——的入口点,它必须可以在其它模块中导入。
例如,你可以把它放置到 tasks 模块中。虽然你可以在不重新配置 Flask 的情况下使用 Celery,但继承任务、添加对 Flask 应用上下文的支持以及关联Flask 配置会让情况变得更好。
这就是把 Celery 集成到 Flask 的全部必要步骤:
~~~
from celery import Celery
def make_celery(app):
celery = Celery(app.import_name, broker=app.config['CELERY_BROKER_URL'])
celery.conf.update(app.config)
TaskBase = celery.Task
class ContextTask(TaskBase):
abstract = True
def __call__(self, *args, **kwargs):
with app.app_context():
return TaskBase.__call__(self, *args, **kwargs)
celery.Task = ContextTask
return celery
~~~
该函数创建一个新的 Celery 对象,并用应用配置来配置中间人(Broker),用 Flask 配置更新其余的 Celery 配置,之后在应用上下文中创建一个封装任务执行的任务子类。
### 最简示例
通过上面的步骤,下面即是在 Flask 中使用 Celery 的最简示例:
~~~
from flask import Flask
app = Flask(__name__)
app.config.update(
CELERY_BROKER_URL='redis://localhost:6379',
CELERY_RESULT_BACKEND='redis://localhost:6379'
)
celery = make_celery(app)
@celery.task()
def add_together(a, b):
return a + b
~~~
这项任务可以在后台调用:
~~~
>>> result = add_together.delay(23, 42)
>>> result.wait()
65
~~~
### 运行 Celery 职程
现在如果你行动迅速,已经执行过了上述的代码,你会失望地得知 .wait()永远不会实际地返回。这是因为你也需要运行 Celery。你可以这样把 Celery以职程运行:
~~~
$ celery -A your_application worker
~~~
your_application 字符串需要指向创建 celery 对象的应用所在包或模块。
© 版权所有 2013, Armin Ronacher.
- 欢迎使用 Flask
- 前言
- 给有经验程序员的前言
- 安装
- 快速入门
- 教程
- 介绍 Flaskr
- 步骤 0: 创建文件夹
- 步骤 1: 数据库模式
- 步骤 2: 应用设置代码
- 步骤 3: 创建数据库
- 步骤 4: 请求数据库连接
- 步骤 5: 视图函数
- 步骤 6: 模板
- 步骤 7: 添加样式
- 福利: 应用测试
- 模板
- 测试 Flask 应用
- 记录应用错误
- 配置处理
- 信号
- 即插视图
- 应用上下文
- 请求上下文
- 用蓝图实现模块化的应用
- Flask 扩展
- 与 Shell 共舞
- Flask 代码模式
- 大型应用
- 应用程序的工厂函数
- 应用调度
- 使用 URL 处理器
- 部署和分发
- 使用 Fabric 部署
- 在 Flask 中使用 SQLite 3
- 在 Flask 中使用 SQLAlchemy
- 上传文件
- 缓存
- 视图装饰器
- 使用 WTForms 进行表单验证
- 模板继承
- 消息闪现
- 用 jQuery 实现 Ajax
- 自定义错误页面
- 延迟加载视图
- 在 Flask 中使用 MongoKit
- 添加 Favicon
- 数据流
- 延迟请求回调
- 添加 HTTP Method Overrides
- 请求内容校验码
- 基于 Celery 的后台任务
- 部署选择
- mod_wsgi (Apache)
- 独立 WSGI 容器
- uWSGI
- FastCGI
- CGI
- 聚沙成塔
- API
- JSON 支持
- Flask 中的设计决策
- HTML/XHTML 常见问题
- 安全注意事项
- Flask 中的 Unicode
- Flask 扩展开发
- Pocoo 风格指引
- Python 3 支持
- 升级到最新版本
- Flask Changelog
- 许可证
- 术语表