2016-07-13 69 views
10

Sto usando MySql come risultato backend per il sedano. Voglio memorizzare gli argomenti del programma anche in DB.Come inserire gli argomenti dei processi di sedano nel database da interrogare; usando mysql

Ad esempio:

add.apply_async(args=[num1, num2, user] 

In questo caso voglio archiviare l'argomento utente in DB, in modo che possa interrogare più tardi.

Attualmente, restituisco gli argomenti forniti che sono memorizzati nel DB.

def add(num1, num2, user): 
    return [num1+num2, user] 

Tuttavia, quando l'attività è in esecuzione, l'utente non è inserito e non è possibile interrogarlo in DB. C'è qualche soluzione/hack per questo?

+1

Non riesci a _connect_? Oppure impossibile _SELECT_? –

risposta

1

Si utilizza solo MySql come back-end di risultati o lo si utilizza anche per la coda (cosa che non consiglierei)? Se lo stai usando per una coda, gli argomenti dovrebbero essere nel database non appena l'attività è stata inviata. In caso contrario, il risultato dell'attività non può essere memorizzato fino al termine dell'attività.

Se è necessario che gli argomenti siano interrogabili durante l'esecuzione dell'attività, è necessario inserirli manualmente in una tabella DB all'inizio dell'attività. Se si desidera che siano in grado di eseguire query prima dell'avvio dell'attività, è necessario inserirli in una tabella DB immediatamente prima di chiamare apply_async.

+0

Grazie! C'è un problema attraverso. Durante l'invio di ciascun comando, si apriva una nuova connessione DB e quando vengono eseguiti più cmd potrebbe esserci un problema. Stavo cercando un soln di seder che potesse gestire anche le connessioni DB. – Rajs123

+0

Si consiglia di utilizzare un pool di connessioni DB aperte. La chiamata –

0

Supponendo di essere in grado di connettersi e selezionare il db, si consiglia di separare una funzione con parametri di ricerca e una funzione callback per memorizzare i risultati in db.

Add() funzionerà i risultati e store_callback() li memorizzerà in db quando sarà pronto. Quindi, se i parametri sono pronti, il codice può andare al prossimo compito e memorizzare il risultato (utente) quando fatto.

Qualcosa di simile:

def store_callback(result): 
    sql_insert = 'INSERT INTO your_table VALUES(?, ?,)' 
    curs.execute(sql_insert, result) #result is a list passed from add() 

def add(num1, num2, user): 
    return [num1+num2, user] 


# check parameters are present in db: 
curs.execute("SELECT * FROM your_table WHERE user = ?", [_user]) 
user_exists = curs.fetchone() 
# 
if user_exists: 
    add.apply_async((num1, num2, user,) , link=store_callback.s()) 

si può anche creare un collegamento add() per un altro compito.

+0

memorizzerà i risultati dopo l'esecuzione del lavoro. Ho bisogno di interrogare lo stato del lavoro, il cmd e gli argomenti (con l'id assegnato) durante l'esecuzione. – Rajs123

0

È necessario fare la coda, ogni utente crea una coda per sé, attività sedano ottenere argomenti dalla coda utente.

queue.get(timeout=10)# if nothing got then retry util get the arguments