2013-10-29 10 views
9

Sono in esecuzione il mio server utilizzando questo comando:assegnare compiti diversi a diversi lavoratori di sedano

celery worker -Q q1,q2 -c 2 

il che dimostra che il mio server si occuperà di tutte le attività sulle code q1 e q2, e ho 2 lavoratori in esecuzione. Il mio server dovrebbe supportare 2 diversi compiti:

@celery.task(name='test1') 
def test1(): 
    print "test1" 
    time.sleep(3) 

@celery.task(name='test2') 
def test2(): 
    print "test2" 

Se mando i miei compiti test1 fare la fila q1 e test2 a q2, sia ai lavoratori verrà eseguito entrambi i compiti. Così il risultato sarà:

test1 
test2 
test1 
test2 
... 

Ora quello che serve è uno dei miei lavoratori gestire test1 e l'altro gestisce test2. Una soluzione è quella di eseguire due operatori di sedano come questo:

celery worker -Q q1 -c 1 
celery worker -Q q2 -c 1 

E ognuno gestisce 1 coda. Ma mi piacerebbe averli più puliti e usare -c 2. Ho trovato Celery Routing ma non sono sicuro che sia quello che voglio.

risposta

12

ho trovato la risposta e sto mettendo qui nel caso in cui qualcun altro ha voluto fare lo stesso:

Invece di usare celery worker -Q q1,q2 -c 2, potrebbe essere utilizzato celery multi:

celery multi start 2 -Q:1 q1 -Q:2 q2 -c:1 1 -c:2 1 

che dice che abbiamo 2 code: -Q:1 q1 significa coda # 1 con nome di q1 e uguale a q2 e abbiamo diverse concurrencies per ogni coda, -c:1 1 significa che il primo operatore di sedani ha una concorrenza di 1.

+1

Quindi stai usando due broker qui? Mi chiedo se sia possibile utilizzare solo un broker condiviso e un server di lavoro condiviso? L'operatore chiama semplicemente test1() o test2() in base ai nomi delle attività. Grazie. –

+0

Questo è in realtà ciò che desideri. Broker e server condivisi. Sono solo lavoratori diversi, gestiscono compiti diversi usando code diverse. – AliBZ

+0

Puoi indicarmi il documento in cui posso imparare come inviare attività alle code corrispondenti? Perché dal codice precedente, non vedo alcuna relazione vincolante tra test1, test2 e q1, q2. Molte grazie. –

Problemi correlati