發表文章

目前顯示的是有「flask」標籤的文章

[ Celery ] Flask, Celery & SQLAlchemy Example (4/4)

圖片
本文為影片筆記,文中內容與影片不一定完全相同。 Database 資料存取的過程中多少會花費一些時間,網頁通常在存取完成後才會更新網頁,這將影響用戶體驗。 這章節主要是模擬存取過程中,使用 Celery 避免使用者花費時間等待。 接續上一章的代碼 # celery_example.py from flask import Flask from flask_celery import make_celery from flask_sqlalchemy import SQLAlchemy from random import choice app = Flask(__name__) app.config['CELERY_BROKER_URL'] = 'redis://localhost:6379/0' app.config['CELERY_BACKEND'] = 'db+sqlite:///results.sqlite' app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///results.sqlite' # 選擇資料存取的目的地,不需要加連接驅動的名稱,所以沒有 “db+” celery = make_celery(app) db = SQLAlchemy(app) # 建立 Flask app 的另一個延伸 class Results(db.Model): # 建立數據庫 id = db.Column('id', db.Integer, primary_key=True) data = db.Column('data', db.String(50)) @app.route('/process/ ') def process(name): reverse.delay(name) return 'I sent an async request!' @app.route('/insertData') def insertData(): return insert() @celery.task(name=...

[ Celery ] Asynchronous Task in Flask Using Celery (3/4)

圖片
本文為影片筆記,文中內容與影片不一定完全相同。 建立 Flask 官網 提供,整合 Celery 和 Flask 的代碼: # flask_celery.py from celery import Celery def make_celery(app): celery = Celery(app.import_name, backend=app.config['CELERY_BACKEND'], 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 建立 Flask 後端: # celery_example.py from flask import Flask from flask_celery import make_celery app = Flask(__name__) app.config['CELERY_BROKER_URL'] = 'redis://localhost:6379/0' # 使用 Redis 緩存器 app.config['CELERY_BACKEND'] = 'redis://localhost:6379/0' # 也使用 Redis 作為訊息記錄器 celery = make_celery(app) # 建立 Flask app 的延伸 @app.route("/process/ ") def process(...