2012-04-19 21 views
17

Właśnie zaczynam używać django-celery i chciałbym ustawić celeryd jako demon. Wydaje się jednak, że model instructions może być skonfigurowany tylko dla jednej witryny/projektu na raz. Czy seler może obsłużyć więcej niż jeden projekt, czy może obsłużyć tylko jeden? A jeśli tak, to czy istnieje prosty sposób na skonfigurowanie selerii do automatycznego uruchamiania dla każdej konfiguracji, co wymaga utworzenia oddzielnego skryptu inicjującego dla każdego z nich?Używanie selerased jako demona z wieloma aplikacjami django?

Odpowiedz

8

Podobnie jak wszystkie interesujące pytania, odpowiedź brzmi: to zależy od. :)

Możliwe jest stworzenie scenariusza, w którym seler może być używany przez dwie niezależne strony. Jeśli wiele witryn przesyła zadania do tej samej giełdy, a zadania nie wymagają dostępu do konkretnej bazy danych - powiedzmy, że działają na adresy e-mail, numery kart kredytowych lub coś innego niż rekord bazy danych - wtedy jeden celeryd może bądź wystarczający. Upewnij się tylko, że kod zadania znajduje się we wspólnym module ładowanym przez wszystkie witryny i serwer selera.

Zazwyczaj jednak okaże się, że seler potrzebuje dostępu do bazy danych - albo ładuje obiekty na podstawie identyfikatora, który został przekazany jako parametr zadania, albo musi zapisać pewne zmiany w bazie danych, lub najczęściej oba. Wiele witryn/projektów zazwyczaj nie udostępnia bazy danych, nawet jeśli mają one te same aplikacje, więc trzeba trzymać kolejki zadań oddzielnie.

W takim przypadku zwykle zdarza się, że skonfigurowano brokera pojedynczego komunikatu (RabbitMQ na przykład) z wieloma centralami. Każda wymiana otrzymuje wiadomości z jednej strony. Następnie uruchamiasz jeden lub więcej procesów selerydowanych gdzieś dla każdej wymiany (w ustawieniach konfiguracji selera musisz określić wymianę.Nie wierzę, że seleryd może słuchać wielu wymian). Każdy serwer selerydowy zna swoją wymianę, aplikacje, które powinien załadować, oraz bazę danych, z którą powinien się połączyć.

Aby móc nimi zarządzać, sugerowałbym, aby zaglądać do cyme - To przez @asksol i zarządzać wieloma instancjami celeryd, na wielu serwerach, jeśli to konieczne. Nie próbowałem, ale wygląda na to, że powinien obsługiwać różne konfiguracje dla różnych instancji.

1

nie spróbować, ale przy użyciu Seler 3.1.x, która nie potrzebuje Django seler, zgodnie z dokumentacją można instancję aplikacji Seler takiego:

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)) 

Ale można użyć do uruchomienia seler multi kilka pracownicy o pojedynczej konfiguracji każdy, można zobaczyć przykłady here. Więc można uruchomić kilku pracowników z różnych --app Appx parametrów więc będzie używać różnych ło i ustawienia:

# 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 
Powiązane problemy