Hoe gebruik ik / maak een db cursor in mijn python thread?

stemmen
0

Ik krijg threading fouten als ik probeer te gebruiken of een db cursor in mijn process_id functie. Elke draad moet de database procesdata voor hun voorbij id.

Ik kan een cursor in de draad / process_id bij alle (ik krijg threading fouten en de DB nooit updates) niet te gebruiken ... Ik heb het een heleboel verschillende manieren gecodeerd. De code werkt wanneer ik gebruik geen threads.

Ik heb zeer specifieke eisen voor de manier waarop deze code moet worden geschreven, langzaam en stabiel is prima. Ik heb ook uitgesneden veel foutafhandeling / logging voordat posting. Daemon / oneindige lus vereist.

Hoe kan ik draai een nieuwe cursor in elke draad?

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()
De vraag is gesteld op 19/03/2020 om 21:55
bron van user
In andere talen...                            

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