Continuo a incorrere in problemi di mysql wierd mentre i lavoratori eseguono le attività subito dopo la creazione.Creazione di una connessione di database separata per ogni operatore di sedano
Usiamo Django 1.3, sedano 3.1.17, djorm-ext-piscina 0,5
Iniziamo processo di sedano con la concorrenza 3. mio obeservation finora è, quando l'inizio del processo di lavoratori, hanno trovato e troveranno stessa mysql connecition. Registriamo l'ID della connessione db come di seguito.
from django.db import connection
connection.cursor()
logger.info("Task %s processing with db connection %s", str(task_id), str(connection.connection.thread_id()))
Quando tutti i lavoratori ottengono compiti, il primo eseguito con successo, ma gli altri due dà strani errori di MySQL. Errori con "Mysql server andato via" o con una condizione in cui Django genera l'errore "DoesNotExist". chiaramente gli oggetti che Django sta interrogando esistono.
Dopo questo errore, ciascun operatore inizia a ricevere la propria connessione al database, dopodiché non troviamo alcun problema.
Qual è il comportamento predefinito di sedano? È progettato per condividere la stessa connessione al database. In caso affermativo, come viene gestita la comunicazione tra processi? Preferirei preferire una connessione di database diversa per ogni lavoratore.
Ho provato il codice indicato nel link sottostante che non ha funzionato. Celery Worker Database Connection Pooling
Abbiamo anche corretto il codice di sedano suggerito di seguito. https://github.com/celery/celery/issues/2453
Per coloro che non rispondo alla domanda, cortesemente fammi sapere il motivo del downvote.
Stai utilizzando qualsiasi middleware per il pooling di connessioni Django? Inoltre, qual è il tuo 'CONN_MAX_AGE' nella configurazione di django? Penso che questo abbia un comportamento persistente di connessione nel django. Questo potrebbe essere correlato al comportamento che stai vedendo, non qualcosa con Celery stesso. –
Potresti eseguire concurrency = 1 e avviare più worker? –
@AlexLuisArias Avrebbe eseguito solo un processo di lavoro e non è un caso per il problema precedente. –