【问题描述】
使用threading进行多线程继承,重写run方法,在进行多线程调用时,出现run重入问题,并且呈线程数递增,哪位大神帮忙看下。
【代码】
class CMyThread(threading.Thread):
m_print = None
m_result = None
m_func = None
m_args = None
m_lock = None
def __init__(self, func, *args):
threading.Thread.__init__(self)
self.m_print = CPrintMgt()
self.m_func = func
self.m_args = args
print 'CMutilProcess[{}, {}, {}, {}]'.format(self, func, args, self.getName())
def run(self):
print 'CMutilProcess_run[{}, {}, {}, {}, {}]'.format(self, self.getName(), self.m_args, id(self), *self.m_args)
self.m_result = self.m_func(*self.m_args)
def multhread_process_handle_func(func, args):
bResult = False
output_result = []
try:
threads = []
threadNum = len(args)
# 创建线程
for i in range(threadNum):
t = CMyThread(func, *tuple(args[i]))
threads.append(t)
# 启动线程
for i in range(len(threads)):
threads[i].start()
# 执行线程
for i in range(len(threads)):
threads[i].join()
# 获取结果
bResult = True
# print_obj.fnPrintInfo('--------------------------------------------')
print('--------------------------------------------')
for i in range(len(threads)):
if isinstance(threads[i].m_result, bool):
bResultTemp = threads[i].m_result
print('multhread[thread:{}]handle result:{}'.format(i, threads[i].m_result, bResultTemp))
bResult &= bResultTemp
output_result.append(None)
elif isinstance(threads[i].m_result, list) or isinstance(threads[i].m_result, tuple):
bResultTemp = threads[i].m_result[0]
print('multhread[thread:{}]handle result:{}'.format(i, threads[i].m_result, bResultTemp))
bResult &= bResultTemp
output_result.append(list(threads[i].m_result[1:]))
print('multhread[threadnum:{}]all handle result:{}'.format(len(threads), bResult))
print('--------------------------------------------')
# print_obj.fnPrintInfo('--------------------------------------------')
# print_obj.fnPrintInfo('多线程数量({})执行结果:{}'.format(threadNum, bResult))
# print_obj.fnPrintInfo('--------------------------------------------')
except Exception as e:
bResult = False
# print_obj.fnPrintException(e)
finally:
return bResult, output_result