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

Django
|
在 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人覺得這有幫助。
avatar
John Tanner
創始人

我是一位技術高超的軟體開發人員,擁有超過20年的跨平台全端開發經驗。我專長於設計和管理大型專案架構及簡化複雜系統。我的專業知識涵蓋Python、Rust和Django開發。我在區塊鏈技術、人工智慧、高並發系統、應用程式和網頁數據抓取、API開發、資料庫優化、項目容器化以及在生產環境中的部署方面具有深厚的熟練度。

聯絡 John Tanner