Rumah > pembangunan bahagian belakang > Tutorial Python > Menjalankan Kerja Cron dalam Django Menggunakan Saderi dan Docker

Menjalankan Kerja Cron dalam Django Menggunakan Saderi dan Docker

WBOY
Lepaskan: 2024-08-31 06:01:37
asal
424 orang telah melayarinya

Running a Cron Job in Django Using Celery and Docker

Pengenalan kepada Cron Jobs

Cron job ialah tugas berjadual yang berjalan secara automatik pada selang waktu tertentu. Tugasan ini berguna untuk mengautomasikan operasi berulang seperti menghantar e-mel peringatan, menjana laporan atau membersihkan pangkalan data. Dalam projek Django, tugas cron boleh disediakan menggunakan alatan seperti Celery, yang menjadikan penjadualan dan pengurusan tugasan mudah dan cekap.

Menyediakan Projek Django Anda

Mari mulakan dengan mencipta projek Django, memasang pakej yang diperlukan, dan kemudian memasukkan projek itu dengan Docker.

Cipta Persekitaran Maya dan Pasang Django dan DRF

  • Buka terminal anda dan navigasi ke direktori projek anda.
  • Buat dan aktifkan persekitaran maya:
python -m venv myenv
source myenv/bin/activate  # On Windows, use myenv\Scripts\activate
Salin selepas log masuk
  • Pasang Rangka Kerja Django dan Django REST:
pip install django djangorestframework
Salin selepas log masuk

Buat Projek dan Apl Django

  • Buat projek Django baharu:
django-admin startproject myproject
cd myproject
Salin selepas log masuk
  • Buat apl Django baharu:
python manage.py startapp myapp
Salin selepas log masuk
  • Tambahkan apl pada tetapan.py anda:
# myproject/settings.py

INSTALLED_APPS = [
    ...
    'myapp',
    'rest_framework',
]
Salin selepas log masuk

Pasang Saderi dan Redis

  • Pasang Saderi dan Redis:
pip install celery redis
Salin selepas log masuk
  • Sediakan Saderi dalam projek anda dengan mencipta fail celery.py:
# 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'
Salin selepas log masuk
  • Ubah suai init.py untuk memuatkan Celery dengan Django:
# myproject/__init__.py
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ('celery_app',)
Salin selepas log masuk
  • Konfigurasikan Saderi dalam settings.py:
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
Salin selepas log masuk

Buat Tugasan Saderi

Dalam apl Django anda, tentukan tugas dalam tasks.py:

# myapp/tasks.py
from celery import shared_task

@shared_task
def my_scheduled_task():
    print("This task runs every every day.")
Salin selepas log masuk

Buat Konfigurasi Docker

  • Buat fail Docker untuk Django anda untuk api (bernama: 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"]
Salin selepas log masuk
  • Buat fail Docker untuk saderi (bernama: 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"]
Salin selepas log masuk
  • Buat fail requirements.txt untuk menyenaraikan kebergantungan anda:
Django==4.2
djangorestframework==3.14.0
celery==5.3.1
redis==5.0.0
Salin selepas log masuk
  • Buat fail docker-compose.yml untuk mengurus perkhidmatan:
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
Salin selepas log masuk
  • Buat fail .env dan tambahkan nilai URL Redis padanya:
REDIS_URL=<your_redis_url>
Salin selepas log masuk

Bina dan Jalankan Bekas Docker

  • Bina dan jalankan imej Docker:
docker-compose up --build
Salin selepas log masuk

Ini akan memulakan aplikasi Django anda, bersama-sama dengan pekerja Saderi dan penjadual rentak Saderi.

Sahkan Kerja Cron

Tugas Saderi anda kini harus dijalankan mengikut jadual yang anda tetapkan. Anda boleh menyemak log pada masa yang ditetapkan untuk mengesahkan bahawa tugasan sedang dilaksanakan.

Kesimpulan

Menjalankan kerja cron di Django menggunakan Celery, Docker dan Redis menawarkan penyelesaian yang teguh dan berskala untuk mengurus tugas latar belakang. Docker memastikan aplikasi anda berjalan secara konsisten merentasi persekitaran yang berbeza, menjadikan penggunaan lebih mudah. Dengan mengikut langkah di atas, anda boleh mengautomasikan tugas dengan cekap dan mengurus projek Django anda dengan mudah.

Atas ialah kandungan terperinci Menjalankan Kerja Cron dalam Django Menggunakan Saderi dan Docker. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan