99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Flask 基于 Celery 的后臺(tái)任務(wù)

2021-08-11 10:34 更新

Celery 是一個(gè) Python 的任務(wù)隊(duì)列,包含線程/進(jìn)程池。曾經(jīng)有一個(gè) Flask 的集成, 但在 Celery 3 重構(gòu)了內(nèi)部細(xì)節(jié)后變得不必要了。本指導(dǎo)補(bǔ)充了如何妥善在 Flask 中使用 Celery 的空白,但假設(shè)你已經(jīng)讀過(guò)了 Celery 官方文檔中的教程 使用 Celery 的首要步驟

安裝 Celery

Celery 提交到了 Python Package Index (PyPI),所以可以通過(guò)標(biāo)準(zhǔn) Python 工具 pipeasy_install 安裝:

$ pip install celery

配置 Celery

你需要的第一個(gè)東西是一個(gè) Celery 實(shí)例,稱為 Celery 應(yīng)用。僅就 Celery 而言 其與 Flask 中的 Flask 對(duì)象有異曲同工之妙。因?yàn)檫@個(gè)實(shí)例用 于你在 Celery 中做任何事——諸如創(chuàng)建任務(wù)和管理職程(Worker)——的入口點(diǎn), 它必須可以在其它模塊中導(dǎo)入。

例如,你可以把它放置到 tasks 模塊中。雖然你可以在不重新配置 Flask 的 情況下使用 Celery,但繼承任務(wù)、添加對(duì) Flask 應(yīng)用上下文的支持以及關(guān)聯(lián) Flask 配置會(huì)讓情況變得更好。

這就是把 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

該函數(shù)創(chuàng)建一個(gè)新的 Celery 對(duì)象,并用應(yīng)用配置來(lái)配置中間人(Broker), 用 Flask 配置更新其余的 Celery 配置,之后在應(yīng)用上下文中創(chuàng)建一個(gè)封裝任務(wù) 執(zhí)行的任務(wù)子類。

最簡(jiǎn)示例

通過(guò)上面的步驟,下面即是在 Flask 中使用 Celery 的最簡(jiǎn)示例:

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

這項(xiàng)任務(wù)可以在后臺(tái)調(diào)用:

>>> result = add_together.delay(23, 42)
>>> result.wait()
65

運(yùn)行 Celery 職程

現(xiàn)在如果你行動(dòng)迅速,已經(jīng)執(zhí)行過(guò)了上述的代碼,你會(huì)失望地得知 .wait() 永遠(yuǎn)不會(huì)實(shí)際地返回。這是因?yàn)槟阋残枰\(yùn)行 Celery。你可以這樣把 Celery 以職程運(yùn)行:

$ celery -A your_application worker

your_application 字符串需要指向創(chuàng)建 celery 對(duì)象的應(yīng)用所在包或模塊。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)