[ Celery ] Flask, Celery & SQLAlchemy Example (4/4)
本文為影片筆記,文中內容與影片不一定完全相同。
Database 資料存取的過程中多少會花費一些時間,網頁通常在存取完成後才會更新網頁,這將影響用戶體驗。
這章節主要是模擬存取過程中,使用 Celery 避免使用者花費時間等待。
接續上一章的代碼
執行代碼:
資料夾中也會出現 “results.sqlite” 檔,打開可檢視剛存取的數據。
修改代碼:
執行 Celery:
重新執行代碼後,會發現網頁會先被更新,但在 Celery 的執行畫面中仍然在存取資料,等待一段時間後就會顯示 “Done!!!”。
接著就會發現 “results.sqlite” 的資料被更新了。
老實說,連接驅動說實話我不知道是什麼意思,只知道要這麼做......
到目前為止 Celery 在 Flask 應該能輕鬆應用了,這樣的功能除了在存取數據上,也可以將機器學習加入網站中。
減少訓練模型或預測數據上消耗的時間,影響用戶體驗。
Asynchronous Tasks in Python - Getting Started With Celery (1/4)
Asynchronous Tasks in Python - Celery Backend Tutorial (2/4)
Asynchronous Task in Flask Using Celery (3/4)
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_example.reverse') def reverse(string): return string[::-1] def insert(): # for i in xrange(500): # Python 2 for i in iter(range(20000)): # Python 3 。可以增加存取的數據量,增加等待時間。 data = ''.join(choice('ABCDE') for i in range(10)) result = Results(data=data) db.session.add(result) db.session.commit() return 'Done!!!' if __name__ == '__main__': db.create_all() # 不知道什麼原因,我不加這行無法運作 app.run(debug=True)
執行代碼:
$ python3 celery_example.py打開網頁 “http://localhost:5000/insertData”,將會發現需要等待一段時間後,網頁才會更新。
資料夾中也會出現 “results.sqlite” 檔,打開可檢視剛存取的數據。
修改代碼:
# celery_example.py ... @app.route('/insertData') def insertData(): insert.delay() # 將任務加入序列中 return 'I sent an async request to inser data into the database.' ... @celery.task(name='celery_example.insert') # 加入修飾器 def insert(): ...
執行 Celery:
$ celery -A celery_example.celery worker --loglevel=infoCelery 執行畫面將會多出一個可加入序列中的任務。
重新執行代碼後,會發現網頁會先被更新,但在 Celery 的執行畫面中仍然在存取資料,等待一段時間後就會顯示 “Done!!!”。
接著就會發現 “results.sqlite” 的資料被更新了。
老實說,連接驅動說實話我不知道是什麼意思,只知道要這麼做......
到目前為止 Celery 在 Flask 應該能輕鬆應用了,這樣的功能除了在存取數據上,也可以將機器學習加入網站中。
減少訓練模型或預測數據上消耗的時間,影響用戶體驗。
Asynchronous Tasks in Python - Getting Started With Celery (1/4)
Asynchronous Tasks in Python - Celery Backend Tutorial (2/4)
Asynchronous Task in Flask Using Celery (3/4)
Flask, Celery & SQLAlchemy Example (4/4)
留言
張貼留言