2017-01-06 59 views
5

Mam 3 oddzielne projekty Django udostępniające tę samą bazę danych na tym samym komputerze. Potrzebuję skonfigurować dla nich Selera. Teraz moje pytanie brzmi:Używanie pojedynczego serwera selerowego do wielu projektów Django

1.) Czy należy uruchomić oddzielne demonów seler dla oddzielnych projektów, i ustawić różne vhosty i użytkowników w RabbitMQ które nie chcą zrezygnować, ponieważ byłoby to marnotrawstwo zasobów lub

2.) Czy istnieje sposób, w jaki mogę kierować wszystkie zadania z różnych projektów na jeden serwer selerowy.

Również, jak przydatne będzie supervisord być w rozwiązaniu?

Odpowiedz

0

Tak, możesz używać tego samego serwera selera do odbierania zadań z oddzielnych projektów.

Masz oddzielną aplikację selera (lub tylko jeden plik), powiedzmy foo, która ma wszystkie zadania, które są używane w różnych projektach.

# foo.py  
from celery import Celery 

app = Celery(broker='amqp://[email protected]//') 

@app.task 
def add(x, y): 
    return x + y 

@app.task 
def sub(x, y): 
    return x - y 

Zacznij pracownika do wykonywania zadań

celery worker -l info -A foo 

Teraz z Project A, można zadzwonić add

import celery 

celery.current_app.send_task('foo.add', args=(1, 2)) 

I od projektu B, można zadzwonić sub

import celery 

celery.current_app.send_task('foo.sub', args=(1, 2)) 

Możesz użyć superwizora, aby zarządzać selerem.

Takie podejście może być nieco trudniejsze do testowania, ponieważ send_task nie będzie respektować CELERY_ALWAYS_EAGER. Możesz jednak użyć numeru this snippet, aby CELERY_ALWAYS_EAGER został zaakceptowany przez send_task.

+0

A jak projekt A i projekt B wiedzą o tym, jak połączyć się z brokerem? Czy brakuje czegoś lub czegoś brakuje? – dahrens

+0

Może to był mój [brakujący element] (http://docs.celeryproject.org/en/latest/userguide/application.html#mainname) – dahrens