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

这篇博客介绍了如何通过重写`threading.Thread`类来实现获取线程返回值的功能。作者创建了一个名为`MyThread`的子类,其中`run`方法用于执行任务并保存返回值,`join`方法被重写以返回线程执行的结果。通过一个`ReturnValue`类实例化多个`MyThread`对象,执行任务并收集每个线程的返回值,展示了这个自定义线程类的实际应用。
摘要由CSDN通过智能技术生成

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值