Redis와 RabbitMQ는 Celery를 사용할 때 가장 적합한 브로커일 수 있지만 로컬에서 개발할 때는 과잉이라고 느낄 수 있습니다. Celery 5.4 문서에는 SQLite를 로컬 개발을 위한 실험적 브로커로 사용할 수 있다고 언급되어 있습니다. 그러나 Celery의 백엔드 및 브로커 페이지로 이동하면 SQL에 대한 유일한 언급은 SQLAlchemy 백엔드에 대한 것입니다. 다행히 페이지에는 "이 섹션은 백엔드와 브로커를 포괄적으로 다루지 않습니다."라고 나와 있습니다.
이 게시물은 Django 프로젝트에서 Celery용 SQLite 브로커(또는 모든 SQL!)를 구현하는 방법을 보여줍니다. 이 게시물에서는 Celery 사용 방법을 가르쳐주지 아닙니다. 이에 대한 공식 Celery 문서를 확인하세요.
이 게시물의 목적에 따라 Celery의 공식 "Django 사용 첫 단계" 가이드의 단계를 사용하여 Celery가 설치된 기존 Django 프로젝트가 이미 있다고 가정합니다. Celery 백엔드는 필수가 아니지만 django-celery-results 설치 및 구성에 대한 가이드 단계를 따르는 것이 좋습니다. 백엔드와 브로커의 차이점이 무엇인지 확실하지 않은 경우 내 기사 "셀러리의 작업, 브로커, 작업자 및 백엔드 이해"
를 확인하세요.소스 문서에 대한 모든 링크는 별도로 명시된 경우를 제외하고 게시 당시(2024년 7월) 현재 버전의 Django, Celery 및 SQLAlchemy에 대한 것입니다. 먼 미래에 이 글을 읽고 계시다면 상황이 달라졌을 수도 있습니다.
Celery는 작업과 대기열을 관리하는 동안 브로커와 메시지를 교환하기 위해 Kombu라는 다른 라이브러리에 위임합니다. RabbitMQ 및 Redis는 Kombu의 가장 완벽한 기능을 갖춘 전송(브로커)이지만 Amazon SQS, ZooKeeper 및 MongoDB에 대한 가상 전송도 제공합니다.
Kombu 문서의 구석구석에 PostgreSQL, MySQL 및 SQLite를 지원하는 SQLAlchemy 전송 모델이 있습니다. 옛날에는 SQLAlchemy 브로커가 Celery 웹사이트에 문서화되어 있었지만 이후 최신 버전의 라이브러리에서는 문서에서 제거되었습니다. 그럼에도 불구하고 여전히 지역 발전에 충분히 효과가 있습니다.
Django 앱에서 후속 데이터베이스를 Celery 브로커로 사용하려면 먼저 SQLAlchemy를 설치하세요.
pip install SQLAlchemy
Django 프로젝트의 settings.py 파일 내에서 CELERY_BROKER_URL 설정을 사용하여 브로커의 백엔드를 설정할 수 있습니다.
# BASE_DIR is the directory of your project's main directory. CELERY_BROKER_URL = f"sqlalchemy sqlite:////{BASE_DIR}/broker.sqlite3"
SQLAlchemy 브로커 URL은 다음 세 부분으로 구성됩니다.
Mac/Unix 및 Windows의 SQLite에 대한 연결 문자열이 다릅니다.
# MacOS/Unix CELERY_BROKER_URL = "sqla sqlite:////your/project/path/broker.sqlite3" # Windows CELERY_BROKER_URL = "sqla sqlite:///C:your\\project\\path\\broker.sqlite3"
Postgres를 Celery 브로커로 사용할 수도 있고 MySQL을 Celery 브로커로 쉽게 사용할 수도 있습니다.
# MySQL CELERY_BROKER_URL = "sqlalchemy mysql://scott:tiger@localhost/foo" # PostgreSQL CELERY_BROKER_URL = "sqla postgresql://scott:tiger@localhost/mydatabase" # PosgreSQL connecting using pg8000 CELERY_BROKER_URL = "sqla postgresql pg8000://scott:tiger@localhost/mydatabase"
MySQL 또는 PostgreSQL에 연결하려면 다른 라이브러리를 설치해야 할 수 있으며, 설치하는 라이브러리는 SQLAlchemy 연결 문자열에 영향을 미칠 수 있습니다. 자세한 내용은 SQLAlchemy 데이터베이스 URL 문서를 확인하세요.
어떤 데이터베이스를 선택하든 상관없이 다양한 환경에서 쉽게 변경할 수 있도록 브로커 URL을 환경 변수에 저장하는 것이 좋습니다.
CELERY_BROKER_URL = os.getenv("CELERY_BROKER_URL")
SQLAlchemy 전송은 실험적인 것으로 간주될 가능성이 높으므로 프로덕션 용도로 사용되지 않습니다. 데이터 손실이 발생하거나 메시지가 여러 번 전달될 수 있습니다. Celery의 브로커 및 백엔드 페이지에 나열된 보다 강력한 브로커로 전환하는 것을 고려해보세요.
그렇지만 지역 개발이나 소규모 프로젝트에도 괜찮을 수 있습니다. 하지만 앞으로 SQLAlchemy를 브로커로 사용할 수 있는 기능이 없어져도 놀라지 않을 것입니다.
Celery를 로컬에서 실행하면 대기열 기반 애플리케이션 작업을 시작할 수 있습니다. 그러나 자동 재장전 기능이 부족하여 마찰이 발생할 수 있습니다. Django 애플리케이션에서 자동 Celery 다시 로드를 설정하려면 내 게시물 "사용자 정의 Django 명령을 사용하여 Celery 작업자를 자동으로 다시 로드"를 읽어보세요.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3