前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Python】python获取线程的返回值的方法

【Python】python获取线程的返回值的方法

作者头像
py3study
发布2020-01-09 01:44:56
1.6K0
发布2020-01-09 01:44:56
举报
文章被收录于专栏:python3python3

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

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

代码语言:javascript
复制
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()
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档