iT邦幫忙

0

Python & Celery 學習筆記_基本操作

  • 分享至 

  • xImage
  •  

這邊主要是紀錄一下目前學習 Celery 的一些紀錄,想要知道完整的 Celery 的介紹可以自行 Google ~
過程中如果有錯誤,歡迎留言討論!!

一、套件安裝

pip install celery
pip install redis
pip install gevent
pip install sqlalchemy

註: 由於在 windows 作業系統中不支援 Celery 的運作,需要另外安裝套件才行
註: Celery 本身的 backend 為 ORM 架構,因此需要安裝 sqlalchemy

二、如何運行 Celery Worker

celery -A <module_name> worker -l info -P gevent

註: 如果不是 windows 系統則不需要加上 -P gevent

三、建立基本的任務

  • celery_start.py
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 中調用任務的方法大致上有三種,分別是:

  1. calling(call)
  2. delay(*args, **kwargs)
  3. apply_async(*args, **kwargs, ......其他參數)

(一)、calling(call)

這個方式為直接呼叫任務名稱,但要注意此方法並不會將任務加入 worker 當中,
基本上就和普通的函數呼叫一樣

>>> from celery_start import hello_world
>>> print(hello_world())

(二)、delay(*args, **kwargs)

使用這個方式,會將任務加入 celery worker 中,此方法可以理解為 apply_async
的簡易方式,缺點為無法設定其他複雜的參數

>>> from celery_start import hello_world
>>> hello_world.delay("nick") 

https://ithelp.ithome.com.tw/upload/images/20220312/20144024fYdjzDgnLk.jpg

註: 筆者本地端開啟 celery server 的語法為 celery -A celery_start worker -l info -P gevent

(三)、apply_async

這個方法為同樣可以將任務加入列隊中,但相較於 delay 可以多設定很多參數,
例如: 等待時間、甚麼時候要被執行...... 等等,下面的示範為,設定幾秒鐘後執行,
關於定時執行的部分,會於另一篇文章詳細說明

>>> from celery_start import hello_world
>>> hello_world.apply_async(("nick",), countdown=20) 

可以看到透過設定 countdown 為 20 後,celery 會在收到任務後的 20 秒才開始執行
指定的任務
https://ithelp.ithome.com.tw/upload/images/20220312/20144024RDr63Ee0gc.jpg

五、結語

透過 celery 我們可以很輕鬆的實現任務的列隊以及管理,在 celery 中還有許多設定
可以讓任務更加有效率地進行,下一篇將會介紹 countdown、eta 等讓 celery 可以定時
執行的方法


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言