Python 異步任務(wù)神器 Celery 結(jié)合Flask使用!
說(shuō)在前頭用Python搞后臺(tái)開(kāi)發(fā)的,應(yīng)該都知道celery的重要性。廢話不多說(shuō),搞起。安裝使用pip來(lái)安裝,環(huán)境python3+Flask-Celery-Helper==1.1.0celery==4.1.0redis==3.0....
說(shuō)在前頭
用Python搞后臺(tái)開(kāi)發(fā)的,應(yīng)該都知道celery的重要性。廢話不多說(shuō),搞起。
安裝
使用pip來(lái)安裝,環(huán)境python3+
Flask-Celery-Helper==1.1.0
celery==4.1.0
redis==3.0.1
準(zhǔn)備工作
目錄結(jié)構(gòu)
app
|-__init__.py
|-tasks.py
config.py
celery_runner.py
celery_runner.py
tasks.py
def task_demo():
print("執(zhí)行到我了")
__init__.py
from flask_celery import Celery
def create_app(config_name):
app = Flask(__name__)
db.app = app
app.config.from_object(config[config_name])
config[config_name].init_app(app)
celery.init_app(app) # 后臺(tái)任務(wù)
config.py
import os
basedir = os.path.abspath(os.path.dirname(__file__))
class Config:
JSON_AS_ASCII = False
SECRET_KEY = os.environ.get('SECRET_KEY') or 'hard to guess string'
CELERY_BROKER_URL = 'redis://:密碼@127.0.0.1:6379/11' #使用redis
CELERY_RESULT_BACKEND = 'redis://:密碼@127.0.0.1:6379/11'#使用redis
@staticmethod
def init_app(app):
pass
class DevelopmentConfig(Config):
DEBUG = True
class TestingConfig(Config):
TESTING = True
class ProductionConfig(Config):
DEBUG = False
config = {
'development': DevelopmentConfig,
'testing': TestingConfig,
'production': ProductionConfig,
'default': DevelopmentConfig
}
使用
在根目錄下開(kāi)啟celery服務(wù)
celery worker -c 2 -A celery_runner --loglevel=info
具體參數(shù),獨(dú)自去網(wǎng)上找。
調(diào)用:
task_demo.apply_async()
使用場(chǎng)景
1.就比如發(fā)郵箱這個(gè)例子吧。用戶(hù)點(diǎn)擊發(fā)郵箱后,后臺(tái)異步去執(zhí)行,而不是阻塞等到發(fā)完成功后才提示用戶(hù)說(shuō)郵箱發(fā)送成功。而是馬上去異步執(zhí)行發(fā)布郵箱,提示用戶(hù)去查看郵箱。
2.導(dǎo)出大量訂單。你可以后臺(tái)去執(zhí)行,并生成excel放在后臺(tái),之后提供給客戶(hù)下載即可。又或者可以用長(zhǎng)連接操作提示用戶(hù)。
。。。
場(chǎng)景很多。我就不一一說(shuō)明了。
說(shuō)在最后
假如有幫助到你,或者你也是python愛(ài)好者,點(diǎn)贊,關(guān)注,轉(zhuǎn)發(fā)。我會(huì)持續(xù)更新我日常在項(xiàng)目用到的工具,分享給大家。