Django에서 Celery를 사용한 비동기 멀티스레드 작업 스케줄링

Django
|
Django에서 Celery를 사용한 비동기 멀티스레드 작업 스케줄링


웹 애플리케이션에서 작업을 관리하는 것은 복잡해질 수 있으며, 특히 시간이 많이 걸리는 작업을 비동기적으로 수행해야 할 때 더욱 그렇습니다. 인기 있는 웹 프레임워크인 Django는 Celery로 확장하여 비동기 작업을 효율적으로 처리할 수 있습니다. 이 블로그 게시물에서는 Django 애플리케이션에서 Celery로 주기적 작업 스케줄링을 설정하는 방법을 살펴보겠습니다. 이를 통해 애플리케이션은 지정된 간격으로 백그라운드 작업을 실행하고 주 애플리케이션 스레드에서 작업 처리를 오프로드할 수 있습니다.

1. Celery와 Django Celery Beat 설치

여행은 Celery와 django-celery-beat를 설치하는 것으로 시작합니다. 이것들은 Django에서 작업 스케줄링과 실행을 위한 필수 구성 요소입니다. pip를 사용하여 설치할 수 있습니다.

    pip install celery django-celery-beat
2. 셀러리 구성

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가 시작될 때 이 구성이 로드되도록 하려면 Celery 앱을 가져오세요. your_project_name/__init__.py 파일:

    from .celery import app as celery_app

    __all__ = ('celery_app',)
3. Django 설정 업데이트

다음으로, 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를 실행하고 Beat를 실행하여 구성에 따라 작업을 처리하고 일정을 예약해야 합니다.

    # 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