foundlch 2019-11-18 10:44 采纳率: 0%
浏览 416
已结题

为什么python多线程调用threading重写run出现重复调用错误

【问题描述】
使用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

图片说明

  • 写回答

1条回答

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器