关于Python使用oracle多线程并发操作的问题。。。
在网上找了些Python的多线程的文章,但是大都差不多,而且不着要点,,,
threads = []
t1 = threading.Thread(target=saveAlarm ,args=(merge_info,))
threads.append(t1)
t2 = threading.Thread(target=saveAlarm ,args=(merge_info2,))
threads.append(t2)
t3 = threading.Thread(target=saveAlarm ,args=(merge_info3,))
threads.append(t3)
t4 = threading.Thread(target=saveAlarm ,args=(merge_info4,))
threads.append(t4)
t5 = threading.Thread(target=saveAlarm ,args=(merge_info5,))
threads.append(t5)
t6 = threading.Thread(target=saveAlarm ,args=(merge_info6,))
threads.append(t6)
t7 = threading.Thread(target=saveAlarm ,args=(merge_info7,))
threads.append(t7)
t8 = threading.Thread(target=saveAlarm ,args=(merge_info8,))
threads.append(t8)
for t in threads :
#t.setDaemon(True)
t.start()
for t in threads :
t.join()
//上面这一部分是我自己按照网上的文章写的多线程
//接下来是使用oracle存储数据的代码
def saveAlarminfo(input) :
conf_file = './monitor.conf'
conf = ConfigParser.ConfigParser()
conf.read(conf_file)
oracle_g = conf.get('db' , 'oracle')
user_g = conf.get('db' , 'user')
passwd_g = conf.get('db' , 'passwd')
if None == oracle_g :
print 'There is not an oracle db!'
con = None
cur = None
type_list = [2,2,2]
if type(type_list) != type(input) :
print 'Error:saveAlarminfo(list),there is not a list.'
return
try :
con = cx_Oracle.connect(user_g , passwd_g , oracle_g)
cur = con.cursor()
for line in input :
if None==line or 13!=len(line) :
print 'Warn:length of this line is error.From saveAlarminfo()'
continue
#(28762, 21, 2015021800, 93, 2, 2756, '100023275628762', '500103', 41736, '10401', 1, 1, '201502180010000')
if 1 == line[4] :
sql = 'insert when idc=0 then into ht_alarminfo1 (ALARMID , ALARMTIME , TEMPLATEID , CITYID , AREAID , SCALE , NEID , COVERTYPE , RNCID , LAC
, CI , SAMPLERATIO , RELATENEID , STATUS , USERID) VALUES (' + str(line[12]) + ',' + str(line[2]) + ',' + str(line[1]) + ',' + str(line[9]) + ',' + str(line
[7]) + ',' + str(line[4]) + ',' + str(line[0]) + ',' + str(line[10]) + ',' + str(line[5]) + ',' + '0' + ',' + str(line[0]) + ',' + str(line[3]) + ',\'' + str
(line[6]) + '\',0,\'luozhang\') select count(*) idc from ht_alarminfo1 where ALARMID=' + str(line[12])
cur.execute(sql)
elif 2 == line[4] :
sql = 'insert when idc=0 then into ht_alarminfo1 (ALARMID , ALARMTIME , TEMPLATEID , CITYID , AREAID , SCALE , NEID , COVERTYPE , RNCID , LAC
, CI , SAMPLERATIO , RELATENEID , STATUS , USERID) VALUES (' + str(line[12]) + ',' + str(line[2]) + ',' + str(line[1]) + ',' + str(line[9]) + ',' + str(line[
7]) + ',' + str(line[4]) + ',' + str(line[6]) + ',' + str(line[10]) + ',' + str(line[5]) + ',' + str(line[8]) + ',' + str(line[0]) + ',' + str(line[3]) + ','
+ '0' + ',0,\'luozhang\') select count(*) idc from ht_alarminfo1 where ALARMID=' + str(line[12])
cur.execute(sql)
else :
print 'Error:there is no scale?'
continue
except cx_Oracle.DatabaseError, ex :
error, = ex.args
logging.error('Error.code =%s', error.code)
logging.error('Error.message =%s' , error.message)
finally :
con.commit()
if None == con :
print 'Error:cx_Oracle.connect()'
if None == cur :
print 'Error:cur.cursor()'
if None!=con and None!=cur :
print 'Succeed to link to oracle...'
else :
print 'Error:failed to link to oracle.'
closeOracle(cur , con)
def closeOracle(cur , con) :
if cur != None :
cur.close()
if con != None :
con.close()
print 'End to link to oracle ...............'
在测试数据的时候,按照上面这些代码,完全没有将数据存到oracle里去,而提供的数据都是有的。。。
请问,问题出在哪里?需要怎样改正?谢谢