今天突然遇到一个问题,如何获取多线程的返回值???
以前python的threading 模块写多线程也用的挺多的,但是一般就是同时执行多个函数
from threading import Thread
def funA(a, b):
print("函数funA开始执行")
return a + b
def funB(a, b):
print("函数funB开始执行")
return a * b
if __name__ == '__main__':
t1=Thread(target=funA,args=(1,2))
t2=Thread(target=funB,args=(1,2))
t1.start()
t2.start()
执行结果:
函数funA开始执行
函数funB开始执行
通过上面的函数我们不难发现一个问题,我们无法获取到每一个线程执行之后的返回值
解决方案---重写Thread类,自定义一个get_result()
from threading import Thread
def funA(a, b):
print("函数funA开始执行")
return a + b
def funB(a, b):
print("函数funB开始执行")
return a * b
class MyThread(Thread):#继承Thread类
def __init__(self, func, args):
#关于super的用法可以自行百度
super(MyThread, self).__init__()#初始化Thread
self.func = func
self.args = args
def run(self):
self.result = self.func(*self.args)
def get_result(self):
try:
return self.result
except Exception:
return None
if __name__ == '__main__':
t1 = MyThread(func=funA, args=(1, 2))
t2 = MyThread(func=funB, args=(2, 3))
t1.start()
t2.start()
res1 = t1.get_result()
res2 = t2.get_result()
print(res1, res2)
执行结果:
函数funA开始执行
函数funB开始执行
3 6
主要是通过重写Thread里面的run()方法,改变了多线程的执行方式,通过get_result得到函数运行的返回值