這邊主要是紀錄一下目前學習 Celery 的一些紀錄,想要知道完整的 Celery 的介紹可以自行 Google ~
過程中如果有錯誤,歡迎留言討論!!
pip install celery
pip install redis
pip install gevent
pip install sqlalchemy
註: 由於在 windows 作業系統中不支援 Celery 的運作,需要另外安裝套件才行
註: Celery 本身的 backend 為 ORM 架構,因此需要安裝 sqlalchemy
celery -A <module_name> worker -l info -P gevent
註: 如果不是 windows 系統則不需要加上 -P gevent
from celery import Celery
app = Celery(<module_name>, broker="<broker_url>", backend="<backend_url>")
@app.task
def hello_world(name: str):
if name is not None:
return f"hello {name}"
else:
return "hello world"
在 Celery 中調用任務的方法大致上有三種,分別是:
這個方式為直接呼叫任務名稱,但要注意此方法並不會將任務加入 worker 當中,
基本上就和普通的函數呼叫一樣
>>> from celery_start import hello_world
>>> print(hello_world())
使用這個方式,會將任務加入 celery worker 中,此方法可以理解為 apply_async
的簡易方式,缺點為無法設定其他複雜的參數
>>> from celery_start import hello_world
>>> hello_world.delay("nick")
註: 筆者本地端開啟 celery server 的語法為 celery -A celery_start worker -l info -P gevent
這個方法為同樣可以將任務加入列隊中,但相較於 delay 可以多設定很多參數,
例如: 等待時間、甚麼時候要被執行...... 等等,下面的示範為,設定幾秒鐘後執行,
關於定時執行的部分,會於另一篇文章詳細說明
>>> from celery_start import hello_world
>>> hello_world.apply_async(("nick",), countdown=20)
可以看到透過設定 countdown 為 20 後,celery 會在收到任務後的 20 秒才開始執行
指定的任務
透過 celery 我們可以很輕鬆的實現任務的列隊以及管理,在 celery 中還有許多設定
可以讓任務更加有效率地進行,下一篇將會介紹 countdown、eta 等讓 celery 可以定時
執行的方法