cron ジョブは、指定された間隔で自動的に実行されるスケジュールされたタスクです。これらのタスクは、リマインダー電子メールの送信、レポートの生成、データベースのクリーンアップなどの反復的な操作を自動化するのに役立ちます。 Django プロジェクトでは、Celery などのツールを使用して cron ジョブを設定できるため、タスクのスケジュール設定と管理が簡単かつ効率的になります。
まず、Django プロジェクトを作成し、必要なパッケージをインストールして、Docker でプロジェクトをコンテナ化します。
python -m venv myenv source myenv/bin/activate # On Windows, use myenv\Scripts\activate
pip install django djangorestframework
django-admin startproject myproject cd myproject
python manage.py startapp myapp
# myproject/settings.py INSTALLED_APPS = [ ... 'myapp', 'rest_framework', ]
pip install celery redis
# 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'
# myproject/__init__.py from __future__ import absolute_import, unicode_literals from .celery import app as celery_app __all__ = ('celery_app',)
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.")
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"]
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"]
Django==4.2 djangorestframework==3.14.0 celery==5.3.1 redis==5.0.0
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
REDIS_URL=
docker-compose up --build
これにより、Django アプリケーションが Celery ワーカーおよび Celery ビート スケジューラとともに起動します。
これで、定義したスケジュールに従って Celery タスクが実行されるはずです。指定した時刻のログを確認することで、タスクが実行されていることを確認できます。
Celery、Docker、Redis を使用して Django で cron ジョブを実行すると、バックグラウンド タスクを管理するための堅牢でスケーラブルなソリューションが提供されます。 Docker は、アプリケーションがさまざまな環境間で一貫して実行されることを保証し、デプロイを容易にします。上記の手順に従うことで、タスクを効率的に自動化し、Django プロジェクトを簡単に管理できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3