나는 단지 django-celery을 사용하기 시작했으며, 나는 celeryd를 데몬으로 실행하도록 설정하고 싶습니다. 그러나 instructions은 한 번에 하나의 사이트/프로젝트에 대해서만 구성 할 수 있다고 제안하는 것으로 보입니다. celeryd가 둘 이상의 프로젝트를 처리 할 수 있습니까? 아니면 하나만 처리 할 수 있습니까? 그리고이 경우, 각 구성에 대해 자동으로 시작되도록 celeryd를 설정하는 깨끗한 방법이 있습니까? 각 인스턴스마다 별도의 init 스크립트를 만들어야합니까?여러 django 응용 프로그램에서 celeryd를 데몬으로 사용 하시겠습니까?
답변
흥미로운 질문과 마찬가지로 대답은 입니다. 이는에 달려 있습니다. :)
두 개의 독립적 인 사이트에서 celeryd를 사용할 수있는 시나리오를 제시하는 것이 가능합니다. 여러 사이트에서 동일한 교환기로 작업을 제출하고 작업에 특정 데이터베이스에 대한 액세스가 필요하지 않으면 (예 : 전자 메일 주소 나 신용 카드 번호 또는 데이터베이스 레코드 이외의 다른 데이터베이스에서 작업하는 경우) celeryd는 충분 해. 작업 코드가 모든 사이트와 셀러리 서버에 의해로드되는 공유 모듈에 있는지 확인하십시오.
보통 셀러리는 작업 매개 변수로 전달 된 ID를 기반으로 개체를로드하거나 데이터베이스에 변경 사항을 기록해야하거나, 가장 자주, 둘 다. 여러 사이트/프로젝트는 보통 동일한 앱을 공유하더라도 데이터베이스를 공유하지 않으므로 작업 대기열을 별도로 유지해야합니다.
그런 경우 일반적으로 여러 교환을 사용하여 단일 메시지 브로커 (예 : RabbitMQ)를 설정해야합니다. 각 교환기는 단일 사이트에서 메시지를받습니다. 그런 다음 각 교환에 대해 하나 이상의 celeryd 프로세스를 실행합니다 (셀러리 구성 설정에서 교환을 지정해야합니다 .Celeryd가 여러 교환을 수신 할 수 있다고 생각하지 않습니다). 각 celeryd 서버는 교환,로드해야하는 응용 프로그램 및 연결해야하는 데이터베이스를 알고 있습니다.
이들을 관리하려면 cyme을 살펴 보는 것이 좋습니다. @asksol을 사용하고 필요에 따라 여러 서버에서 여러 개의 celeryd 인스턴스를 관리합니다. 시도하지는 않았지만 다른 인스턴스에 대해 다른 구성을 처리해야하는 것처럼 보입니다.
시도하지 않았하지만 장고 - 셀러리를 필요로하지 않는 셀러리 3.1.X를 사용하여 문서에 따라이 같은 셀러리 응용 프로그램의 인스턴스 수 있습니다
app1 = Celery('app1')
app1.config_from_object('django.conf:settings')
app1.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
을하지만 당신은 몇 가지 실행을 위해 셀러리 멀티를 사용할 수 있습니다 각각 단일 구성을 가진 작업자 인 경우 here을 볼 수 있습니다.
# 3 workers: Two with 3 processes, and one with 10 processes.
$ celery multi start 3 -c 3 -c:1 10
celery worker -n [email protected] -c 10 --config celery1.py --app app1
celery worker -n [email protected] -c 3 --config celery2.py --app app2
celery worker -n [email protected] -c 3 --config celery3.py --app app3
: 그것은 다른 TAKS 및 설정을 사용할 수 있도록 서로 다른
--app appX 매개 변수를 사용하여 여러 노동자를 시작할 수 있도록