Ho uno script Python principale che si collega a un database MySQL e ne estrae pochi record. In base al risultato restituito, inizia come molti thread (istanze di classe) di quanti record vengono afferrati. Ogni thread dovrebbe tornare al database e aggiornare un'altra tabella impostando un flag di stato su uno stato diverso ("processo avviato").Come gestire le connessioni MySQL con il multithreading Python
Per ottenere questo ho cercato di:
1.) Far passare la connessione al database per tutte le discussioni 2.) Aprire una nuova connessione al database da ogni thread
ma nessuno di loro stavano lavorando.
Potrei eseguire il mio aggiornamento senza alcun problema in entrambi i casi utilizzando try/except, ma la tabella MySQL non è stata aggiornata e non è stato generato alcun errore. Ho usato il commit in entrambi i casi.
La mia domanda sarebbe come gestire le connessioni MySQL in questo caso?
aggiornamento sulla base dei primi commenti:
MAIN SCRIPT
-----------
#Connecting to DB
db = MySQLdb.connect(host = db_host,
db = db_db,
port = db_port,
user = db_user,
passwd = db_password,
charset='utf8')
# Initiating database cursor
cur = db.cursor()
# Fetching records for which I need to initiate a class instance
cur.execute('SELECT ...')
for row in cur.fetchall() :
# Initiating new instance, appending it to a list and
# starting all of them
CLASS WHICH IS INSTANTIATED
---------------------------
# Connecting to DB again. I also tried to pass connection
# which has been opened in the main script but it did not
# work either.
db = MySQLdb.connect(host = db_host,
db = db_db,
port = db_port,
user = db_user,
passwd = db_password,
charset='utf8')
# Initiating database cursor
cur_class = db.cursor()
cur.execute('UPDATE ...')
db.commit()
difficile dire qualcosa senza sapere come ci si collega al DB e come si fa a implementare gli aggiornamenti. – Ashalynd
Non capisco completamente la tua domanda. Il caso più semplice funziona, come il Python a thread singolo si connette a mysql e aggiorna una tabella? – qqibrow
@Ashalynd Grazie per aver dedicato del tempo! E scusa ma ero AFK. Ho aggiornato la mia domanda con uno snipet di codice dai miei codici principali e di classe. Questo è il modo in cui avvio le istanze e apro le connessioni al database. Ho cercato di rilevare l'errore durante l'apertura della connessione e l'esecuzione della query dall'istanza con try/tranne senza fortuna. – g0m3z