使用 Celery 和 Docker 在 Django 中執行 Cron 作業
Cron 作業簡介
cron 作業是依照指定時間間隔自動執行的排程任務。這些任務對於自動執行重複操作(例如發送提醒電子郵件、產生報表或清理資料庫)非常有用。在 Django 專案中,可以使用 Celery 等工具來設定 cron 作業,這使得調度和管理任務變得簡單且有效率。
設定您的 Django 項目
讓我們先建立一個 Django 項目,安裝必要的套件,然後使用 Docker 容器化該項目。
創建虛擬環境並安裝Django和DRF
- 開啟終端並導航到您的專案目錄。
- 建立並啟動虛擬環境:
python -m venv myenv source myenv/bin/activate # On Windows, use myenv\Scripts\activate
- 安裝 Django 和 Django REST Framework:
pip install django djangorestframework
建立 Django 專案和應用程式
- 建立一個新的 Django 專案:
django-admin startproject myproject cd myproject
- 建立一個新的 Django 應用程式:
python manage.py startapp myapp
- 將應用程式新增至您的settings.py:
# myproject/settings.py INSTALLED_APPS = [ ... 'myapp', 'rest_framework', ]
安裝 Celery 和 Redis
- 安裝 Celery 和 Redis:
pip install celery redis
- 透過建立 celery.py 檔案在您的專案中設定 Celery:
# myproject/celery.py from __future__ import absolute_import, unicode_literals import os from celery import Celery os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings') app = Celery('myproject') app.config_from_object('django.conf:settings', namespace='CELERY') app.autodiscover_tasks() app.conf.beat_schedule = { 'run-this-task-every-day': { 'task': 'myapp.tasks.my_scheduled_task', 'schedule': crontab(minute="00", hour="7"), # Executes every day at 7 AM }, } app.conf.timezone = 'UTC'
- 修改 init.py 以使用 Django 載入 Celery:
# myproject/__init__.py from __future__ import absolute_import, unicode_literals from .celery import app as celery_app __all__ = ('celery_app',)
- 在settings.py中配置Celery:
CELERY_BROKER_URL = os.environ.get('REDIS_URL') CELERY_RESULT_BACKEND = os.environ.get('REDIS_URL') CELERY_ACCEPT_CONTENT = ['json'] CELERY_TASK_SERIALIZER = 'json' CELERY_RESULT_SERIALIZER = 'json' CELERY_TIMEZONE = 'UTC' CELERY_BROKER_CONNECTION_RETRY_ON_STARTUP = True
創建芹菜任務
在您的 Django 應用程式中,在tasks.py 中定義任務:
# myapp/tasks.py from celery import shared_task @shared_task def my_scheduled_task(): print("This task runs every every day.")
建立 Docker 配置
- 為 Django 的 api 建立一個 Dockerfile(名為:Dockerfile.myapi):
FROM python:3.8-alpine3.15 ENV PYTHONUNBUFFERED=1 ENV PYTHONDONTWRITEBYTECODE=1 WORKDIR /app COPY requirements.txt /app RUN pip install --no-cache-dir -r requirements.txt COPY . . EXPOSE 9000 CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:8000", "myproject.wsgi:application"]
- 為 celery 建立一個 Dockerfile(名為:Dockerfile.myjob)
FROM python:3.8-alpine3.15 ENV PYTHONUNBUFFERED=1 ENV PYTHONDONTWRITEBYTECODE=1 WORKDIR /app COPY requirements.txt /app RUN pip install --no-cache-dir -r requirements.txt COPY . /app CMD ["celery", "-A", "myproject", "worker", "--loglevel=info", "--concurrency=4", "-E", "-B"]
- 建立一個requirements.txt 檔案來列出您的依賴項:
Django==4.2 djangorestframework==3.14.0 celery==5.3.1 redis==5.0.0
- 建立 docker-compose.yml 檔案來管理服務:
services: app: build: context: . dockerfile: Dockerfile.myapi container_name: myapp_api ports: - 7000:7000 env_file: - .env celery: build: context: . dockerfile: Dockerfile.myjob container_name: myapp_job depends_on: - app env_file: - .env
- 建立一個 .env 檔案並在其中加入 Redis URL 值:
REDIS_URL=<your_redis_url>
建置並運行 Docker 容器
- 建置並執行 Docker 映像:
docker-compose up --build
這將啟動您的 Django 應用程序,以及 Celery 工作線程和 Celery 節拍調度程序。
驗證 Cron 作業
您的 Celery 任務現在應該根據您定義的時間表運行。您可以在指定時間查看日誌,確認任務正在執行。
結論
使用 Celery、Docker 和 Redis 在 Django 中執行 cron 作業為管理背景任務提供了強大且可擴展的解決方案。 Docker 可確保您的應用程式在不同環境中一致運行,從而使部署更加輕鬆。透過執行上述步驟,您可以有效率地自動化任務並輕鬆管理您的 Django 專案。
以上是使用 Celery 和 Docker 在 Django 中執行 Cron 作業的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。

每天學習Python兩個小時是否足夠?這取決於你的目標和學習方法。 1)制定清晰的學習計劃,2)選擇合適的學習資源和方法,3)動手實踐和復習鞏固,可以在這段時間內逐步掌握Python的基本知識和高級功能。

Python在開發效率上優於C ,但C 在執行性能上更高。 1.Python的簡潔語法和豐富庫提高開發效率。 2.C 的編譯型特性和硬件控制提升執行性能。選擇時需根據項目需求權衡開發速度與執行效率。

Python和C 各有優勢,選擇應基於項目需求。 1)Python適合快速開發和數據處理,因其簡潔語法和動態類型。 2)C 適用於高性能和系統編程,因其靜態類型和手動內存管理。

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

Python在科學計算中的應用包括數據分析、機器學習、數值模擬和可視化。 1.Numpy提供高效的多維數組和數學函數。 2.SciPy擴展Numpy功能,提供優化和線性代數工具。 3.Pandas用於數據處理和分析。 4.Matplotlib用於生成各種圖表和可視化結果。

Python在Web開發中的關鍵應用包括使用Django和Flask框架、API開發、數據分析與可視化、機器學習與AI、以及性能優化。 1.Django和Flask框架:Django適合快速開發複雜應用,Flask適用於小型或高度自定義項目。 2.API開發:使用Flask或DjangoRESTFramework構建RESTfulAPI。 3.數據分析與可視化:利用Python處理數據並通過Web界面展示。 4.機器學習與AI:Python用於構建智能Web應用。 5.性能優化:通過異步編程、緩存和代碼優
