[ 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)
留言
張貼留言