如何使用Celery實現分散式任務調度
概述:
Celery是Python中最常用的分散式任務佇列庫之一,它可以用來實現非同步任務調度。本文將介紹如何使用Celery來實現分散式任務調度,並附上程式碼範例。
#首先,我們要安裝Celery函式庫。可以透過以下指令來安裝Celery:
pip install celery
安裝完成後,我們需要建立一個Celery的設定檔。建立一個名為celeryconfig.py
的文件,並加入以下內容:
broker_url = 'amqp://guest@localhost//' # RabbitMQ服务器地址 result_backend = 'db+sqlite:///results.sqlite' # 结果存储方式(使用SQLite数据库) task_serializer = 'json' # 任务序列化方式 result_serializer = 'json' # 结果序列化方式 accept_content = ['json'] # 接受的内容类型 timezone = 'Asia/Shanghai' # 时区设置
from celery import Celery app = Celery('mytasks', include=['mytasks.tasks']) app.config_from_object('celeryconfig')在上面的程式碼中,我們建立了一個名為
mytasks的Celery套用,並將
celeryconfig.py中的設定套用到Celery應用中。
# tasks.py from mytasks import app @app.task def add(x, y): return x + y在上面的程式碼中,我們定義了一個名為
add的任務,用來計算兩個數的和。
celery -A mytasks worker --loglevel=info啟動完成後,Celery Worker將會監聽並處理佇列中的任務。
# main.py from mytasks.tasks import add result = add.delay(4, 6) print(result.get())在上面的程式碼中,我們匯入了先前定義的
add任務,然後使用
delay方法提交一個任務。
delay方法將會傳回一個
AsyncResult對象,我們可以透過呼叫
get方法來取得任務的結果。
AsyncResult物件來監控任務的執行狀態。以下是一個範例:
# main.py from mytasks.tasks import add result = add.delay(4, 6) while not result.ready(): print("Task is still running...") time.sleep(1) print(result.get())在上面的程式碼中,我們透過循環來監控任務的執行狀態。
ready方法將傳回任務是否已完成的布林值。
本文簡要介紹如何使用Celery實現分散式任務調度。透過安裝和設定Celery,建立Celery應用,定義任務,啟動Celery Worker,並提交任務到佇列中,我們可以實現分散式任務調度。使用Celery可以提高任務執行效率,適用於需要進行平行計算或非同步處理的情況。
以上是如何使用Celery實現分散式任務調度的詳細內容。更多資訊請關注PHP中文網其他相關文章!