在 Django 中使用 Celery 排程非同步多執行緒任務

管理 Web 應用程式中的任務可能變得複雜,尤其是當您需要非同步執行耗時的操作時。 Django 是一個流行的 Web 框架,可以使用 Celery 進行擴展,以有效地處理非同步任務。在這篇文章中,我們將探討如何在 Django 應用程式中使用 Celery 設定定期任務調度。這使得您的應用程式可以按照指定的時間間隔運行後台任務,並從主應用程式執行緒中卸載任務處理。
1.安裝 Celery 和 Django Celery Beat
旅程從安裝 Celery 和 django-celery-beat 開始。這些都是Django中任務調度和執行的必備元件。您可以使用 pip 安裝它們:
pip install celery django-celery-beat
2.配置 Celery
安裝 Celery 後,您需要對其進行配置以便與您的 Django 應用程式一起使用。首先建立一個名為 celery.py 在項目的主目錄中。該檔案將初始化 Celery 並將其連結到 Django 的設定。
from celery import Celery import os # Set the default Django settings module for the 'celery' program. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project_name.settings') app = Celery('your_project_name') # Using a string here means the worker will not have to serialize # the configuration object to child processes. app.config_from_object('django.conf:settings', namespace='CELERY') # Load task modules from all registered Django apps. app.autodiscover_tasks()
為了確保在 Django 啟動時載入此配置,請在 your_project_name/__init__.py 文件:
from .celery import app as celery_app __all__ = ('celery_app',)
3.更新Django設定
接下來,透過更新將 Celery 與 Django 設定進行集成 settings.py 文件。這包括指定您的代理和結果後端,可以是 RabbitMQ 或 Redis。
CELERY_BROKER_URL = 'redis://localhost:6379/0' # or 'amqp://localhost//' for RabbitMQ CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' CELERY_TIMEZONE = 'UTC' from celery.schedules import crontab CELERY_BEAT_SCHEDULE = { 'task-name': { 'task': 'myapp.tasks.task_function', 'schedule': crontab(minute=0, hour=0), # Executes daily at midnight }, }
4.明確你的任務
現在,是時候定義你的任務是什麼了。創建一個 tasks.py 在你的 Django 應用程式中建立檔案(例如, myapp ) 並新增您的任務功能。
from celery import shared_task @shared_task def task_function(): # Logic for your asynchronous, multithreaded task print("Task is executing")
這裡, @共享任務 是 Celery 提供的裝飾器,用於將該函數標記為可呼叫任務。
5. 運行 Celery Worker 並且 Beat
最後,您需要執行 Celery worker 並節拍來開始處理任務並根據您的配置安排它們。
# Start Celery Worker celery -A your_project_name worker -l info # Start Celery Beat celery -A your_project_name beat -l info
這些命令啟動工作進程來處理非同步任務,並啟動節拍進程來管理週期性任務。在執行這些命令之前,請確保您的訊息代理程式(例如 Redis 或 RabbitMQ)正在運行。
透過遵循這些步驟,您已經使您的 Django 應用程式能夠有效地處理週期性非同步任務,從而增強應用程式的效能和回應能力。 Celery 是一個功能強大的工具,透過此設置,您可以探索更複雜的任務處理想法。
轉載免責聲明: 本內容受版權保護,所有權利保留於作者。歡迎轉載或分享此頁面,但請確保提供清晰的原始來源,並附上返回此頁面的超連結。感謝您對我們內容的尊重!
這篇文章有幫助嗎?
在196人中有196人覺得這有幫助。
John Tanner
創始人我是一位技術高超的軟體開發人員,擁有超過20年的跨平台全端開發經驗。我專長於設計和管理大型專案架構及簡化複雜系統。我的專業知識涵蓋Python、Rust和Django開發。我在區塊鏈技術、人工智慧、高並發系統、應用程式和網頁數據抓取、API開發、資料庫優化、項目容器化以及在生產環境中的部署方面具有深厚的熟練度。
聯絡 John Tanner