【Python】python获取线程的返回值
admin
2023-07-20 17:02:49
0

threading模块默认没有获取线程返回值的方法。

下面通过重写threading.Tread类来实现:

from threading import Thread
import random
import time
class MyThread(Thread):
    # 继承Thread类
    def __init__(self,group=None, target=None, name=None, args=(), kwargs=None, *, daemin=None):
        Thread.__init__(group, target, name, args, kwargs, daemin=None)
        self._return_value = None
    
    def run(self):
        # 重新定义Thread类里的run方法
        try:
            if self._target:
                self._return_value = self._target(*args, **kwargs)        # 把原来的self._target方法返回值赋给self._return_value
        finally:
            del self._target, self._args, self._kwargs
            
    def join(self, timeout=None):
        # 重新定义join方法,等待线程执行完成,返回值
        Thread.join(self, timeout)            # 调用原类的join方法,原方法中调用Thread类外方法,所以不能直接重写。
        return self._return_value             # 返回self._return_value,在类外,使用join获取值。
        
        
        
class ReturnValue(object):
    # 调用自定义的thread类,获取返回值。
    def __init__(self):
        self.result = None
        
    def run(self):
        thread_list = []
        thread_result = {}
        for i in range(10)
            mythread = MyThread(target=self.show, args=(i,))
            thread_list.append(mythread)
            mythread.start()
            
        for t in thread_list:
            self.result = t.join()
            thread_result[t] = self.result
            thread_list.remove(t)
        for k, v thread_result.items():
            print(k,v)
            
            
    def show(self,i):
        rand = random.randint(2,7)    
        time.sleep(rand)
        return "args:{},rand_value:{}".format(i,rand)

        
return_value = ReturnValue()
return_value.run()

相关内容

热门资讯

英国贝德福德地区发生火车相撞事... 据英国铁路警察局在社交媒体上发布的信息,距离伦敦约97公里的贝德福德地区发生两辆火车相撞事故。
郑州一汽车用品商城起火,当地发... 2026年6月19日21时左右,宏明路柳林路东南角发生火情。消防部门正在全力开展扑救工作,并同步调查...
英特尔挖来前SK海力士CEO,... 当地时间2026年6月18日,英特尔公司宣布任命李锡熙(Seok-Hee Lee)为其Intel F...
美食直达登机口|青岛机场联合美... 齐鲁晚报·齐鲁壹点记者 赵波 通讯员 张瀚 6月18日,为升级旅客出行服务体验、优化旅客候机用餐模式...
深圳打造生物医药特殊物品通关A... 人民财讯6月19日电,据深圳发布,6月18日,深圳生物医药特殊物品监管改革再升级,全流程一体化信息系...
防爆冰柜厂家梳理 化工/科研/... 导语:在化工、医药、科研等对安全存储要求严苛的领域,防爆冰柜作为关键设备,其性能稳定性、防爆等级适配...
人形机器人成功攀登6200米火... IT之家 6 月 19 日消息,据外媒 Futurism 当地时间 14 日报道,一台由宇树 G1 ...
原创 中... 尹希这个名字,或许并不是每个人都熟悉,但在科学圈内,他曾经是被反复提起的“少年天才”的典型代表。早在...
伊美谈判相关斡旋方21日在埃及... 新华社德黑兰6月19日电(记者陈霄 沙达提)据伊朗伊斯兰共和国广播电视台19日报道,埃及和巴基斯坦当...
减少国家干预,古巴通过170余... 据凤凰卫视报道,古巴总理马雷罗6月18日在会上公布了170多项举措,并获得一致通过。这些举措旨在减少...