### 導航
- [索引](# "總目錄")
- [下一頁](# "部署選擇") |
- [上一頁](# "請求內容校驗碼") |
- [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
- 許可證
- 術語表