Come posso utilizzare / creare un cursore db nel mio thread Python?

voti
0

Sto ottenendo gli errori di threading quando cerco di utilizzare o creare un cursore db nella mia funzione process_id. Ogni thread dovrà utilizzare il database per i dati di processo per il loro id passato.

Non posso utilizzare un cursore nel thread / process_id a tutti (si verificano errori di threading e il db mai aggiornamenti) ... ho codificato un sacco di modi diversi. Il codice funziona quando io non uso le discussioni.

Ho esigenze molto specifiche per quanto questo codice deve essere scritto, lento e stabile va bene. Ho anche tagliato un sacco di gestione degli errori / registrazione prima del distacco. è necessario Daemon / Infinite loop.

Come faccio a girare un nuovo cursore in ogni thread?

import threading
import time
from datetime import datetime
import os
import jaydebeapi, sys

#Enter the values for you database connection
database = REMOVED          
hostname = REMOVED
port = REMOVED               
uid = REMOVED       
pwd = REMOVED 

connection_string='jdbc:db2://'+hostname+':'+port+'/'+database

if (sys.version_info >= (3,0)):
    conn = jaydebeapi.connect(com.ibm.db2.jcc.DB2Driver, connection_string, [uid, pwd], jars=REMOVED)
else:
    conn = jaydebeapi.connect(com.ibm.db2.jcc.DB2Driver, [connection_string, uid, pwd])

# Thread Pool Variables
max_threads = 5
used_threads = 0

# define main cursor
cus=conn.cursor()

def process_id(id):
    #create a cursor for a thread
    cus_id=conn.cursor()
    cus_id.execute(SOME QUERY;)
    cus_id.close()
    global used_threads
    used_threads = used_threads - 1         
    return 0

def daemon():
    global num_threads, used_threads
    print(Daemon running...)
    while True:
        #ids to process are loaded into a list...
        for id in ids_to_process:
            if used_threads < max_threads:
                t = threading.Thread(target=process_id, args=(int(id),))
                t.start()
                used_threads += 1
    return 0

daemon()
È pubblicato 19/03/2020 alle 21:55
fonte dall'utente
In altre lingue...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more