2016-01-31 10 views
13

Dove è necessario aggiornare le impostazioni di sedano? Sul lavoratore remoto o sul mittente?Dove si dovrebbero aggiornare le impostazioni di Celery? Sul lavoratore remoto o sul mittente?

Ad esempio, ho un'API che utilizza Django e Celery. L'API invia i lavori remoti ai miei lavoratori remoti tramite un broker (RabbitMQ). Gli operai eseguono uno script python (non usando Django) a volte questi lavori generano attività secondarie.

Ho creato le impostazioni del sedano su entrambi i lati (mittente e lavoratore), cioè entrambi hanno bisogno dell'impostazione BROKER_URL. Tuttavia, supponiamo di voler aggiungere l'impostazione CELERY_ACKS_LATE = True, a quale fine aggiungere questa impostazione? Ciascuno dei lavoratori remoti o del mittente (API)?

Sia l'API che i lavoratori remoti si connettono allo stesso broker, ognuno avvia il sedano in modo diverso. L'API crea un'istanza di Celery tramite Django __init__.py e gli operatori iniziano il sedano tramite supervisore, ad esempio celery -A tasks worker -l info

risposta

5

le impostazioni di django sedici riguardano solo i lavoratori in esecuzione sul server django stesso.

se tutti i dipendenti sono remoti (il modo in cui lo faccio io), sul lato del mittente tutto ciò che serve è mettere la configurazione necessaria per inviare un'attività alla coda delle attività.

e tutte le altre impostazioni devono essere impostate sui lavoratori remoti.

e per i compiti, sul lato del mittente, il tutto ho bisogno di fare è quello di definire la firma del task in questo modo:

@app.task(name='report_task') 
def reportTask(self, link): 
    pass 

poi sul lato dei lavoratori, è necessario creare una nuova applicazione sedano con lo stesso nome e che punta allo stesso broker; per le altre impostazioni di sedano è necessario dichiararle sui lavoratori remoti.

e implementare la logica compiti sulle workeres remoti (si può avere diversi compiti logica per lavoratore, purché abbiano lo stesso nome di attività e gli argomenti della funzione)

+0

che abbia un senso fino a quando guardo le cose come percorso e impostazioni della coda queste impostazioni devono essere sicuramente impostate sul mittente? Sarei gentile se il sedano etichetti quali impostazioni sono mittente e cosa sono client. – Prometheus

+0

Sì, le impostazioni di instradamento e coda devono essere impostate sul mittente, quindi si avvia il personale remoto per l'ascolto su quella coda. – Soufiaane

1

CELERY_ACKS_LATE = True appartiene al lavoratore. Descrive se il lavoratore deve contrassegnare l'attività "riconosciuta" immediatamente dopo averla consumata (prima del completamento) o dopo aver completato (in ritardo). Entrambi i metodi have their drawbacks e penso che tu sappia cosa stai facendo.

Ovviamente sarebbe meglio avere un singolo file di configurazione per entrambe le parti e usarlo. Ad esempio, disporre della base di codice comune per l'intero progetto e dopo aver aggiornato il file in VCS e distribuire - riavviare tutte le parti.

Ma in questo caso con questo flag particolare è possibile riavviare solo lavoratori.

Problemi correlati