[ Celery ] Asynchronous Tasks in Python - Celery Backend Tutorial (2/4)
本文為影片筆記,文中內容與影片不一定完全相同。
Celery 的記錄器有非常多的選擇,有興趣可以參考這裡,影片中使用的是 Database。
將 Celery 官方提供的 Database 連結加入上一篇文章的代碼中:
慚愧的說,使用 SQLite 是因為其他的資料庫都不太熟。應該會再找時間學學其他的資料庫。
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)
Celery 的記錄器有非常多的選擇,有興趣可以參考這裡,影片中使用的是 Database。
將 Celery 官方提供的 Database 連結加入上一篇文章的代碼中:
# tasks.py from celery import Celery app = Celery('tasks', broker='redis://localhost:6379/0', backend='db+sqlite:///results.sqlite') @app.task def reverse(string): return string[::-1]
影片中使用的是 MySQL, 但我選用 SQLite 比較容易上手。
如果想用其他 Database 請參考這裡。
啟動 Celery:如果想用其他 Database 請參考這裡。
$ celery -A tasks worker --loglevel=info執行 Flask App:
>>> from tasks import * >>> reverse.delay('Anthony')
你將會得到與前一張相同的結果。唯一不同的是,資料夾中會出現 “results.sqlite”。
透過 DB Browser for SQLite 開啟。DB Browser for SQLite 可以透過它的 GitHub 下載。
透過 DB Browser for SQLite 開啟。DB Browser for SQLite 可以透過它的 GitHub 下載。
選擇 Browse Data,在資料表中可以看到影片中提到的 celery_taskmeta 和 celery_tasksetmeta。
下方欄位中就可以看到曾經執行的任務了。
修改 tasks.py:下方欄位中就可以看到曾經執行的任務了。
# tasks.py from celery import Celery import time app = Celery('tasks', broker='redis://localhost:6379/0', backend='db+sqlite:///results.sqlite') @app.task def reverse(string): time.sleep(10) # 延遲10秒 return string[::-1]測試緩存器 :
終端機將會出現以下結果。
>>> from tasks import * >>> result = reverse.delay('Anthony') >>> result.status # 10秒內輸入。因延遲10秒,所以未收到資料,因此顯示‘PENDING' 'PENDING' >>> result.status # 10秒後,記錄器已經收到資料,因此顯示‘SUCCESS' 'SUCCESS' >>> result = reverse.delay('Pretty Printed') >>> result.ready() # 未收到資料,因此顯示 False False >>> result.ready() # 已收到資料,因此顯示 Ture True >>> result.get() # 顯示收到的資料 'detnirP ytterP' >>>
輸入過程中可以同時觀察執行 Celery 的終端機,可以發現記錄器確實會延遲收到資訊,收到資料後變數狀態也會改變。
測試緩存的過程可能用文字敘述較難理解,可以直接觀看影片比較容易明白,該操作部分是從 4:47 開始。
接著可以重新開啟 SQLite 檢視剛剛輸入的資料。
測試緩存的過程可能用文字敘述較難理解,可以直接觀看影片比較容易明白,該操作部分是從 4:47 開始。
接著可以重新開啟 SQLite 檢視剛剛輸入的資料。
慚愧的說,使用 SQLite 是因為其他的資料庫都不太熟。應該會再找時間學學其他的資料庫。
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)
留言
張貼留言