今天突然遇到一個(gè)問題吼鳞,如何獲取多線程的返回值看蚜??赔桌?
以前python的threading 模塊寫多線程也用的挺多的供炎,但是一般就是同時(shí)執(zhí)行多個(gè)函數(shù)
from threading import Thread
def funA(a, b):
print("函數(shù)funA開始執(zhí)行")
return a + b
def funB(a, b):
print("函數(shù)funB開始執(zhí)行")
return a * b
if __name__ == '__main__':
t1=Thread(target=funA,args=(1,2))
t2=Thread(target=funB,args=(1,2))
t1.start()
t2.start()
執(zhí)行結(jié)果:
函數(shù)funA開始執(zhí)行
函數(shù)funB開始執(zhí)行
通過上面的函數(shù)我們不難發(fā)現(xiàn)一個(gè)問題,我們無法獲取到每一個(gè)線程執(zhí)行之后的返回值
解決方案---重寫Thread類疾党,自定義一個(gè)get_result()
from threading import Thread
def funA(a, b):
print("函數(shù)funA開始執(zhí)行")
return a + b
def funB(a, b):
print("函數(shù)funB開始執(zhí)行")
return a * b
class MyThread(Thread):#繼承Thread類
def __init__(self, func, args):
#關(guān)于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)
執(zhí)行結(jié)果:
函數(shù)funA開始執(zhí)行
函數(shù)funB開始執(zhí)行
3 6
主要是通過重寫Thread里面的run()方法,改變了多線程的執(zhí)行方式碱茁,通過get_result得到函數(shù)運(yùn)行的返回值