1. 程式人生 > 實用技巧 >python多執行緒非同步執行,並獲取每個執行緒的結果

python多執行緒非同步執行,並獲取每個執行緒的結果

需求:多工非同步執行,每個任務返回不一樣的結果,等到所有任務結束,獲取到每個任務的結果之後,主程式再結束。

 1 # -*- coding: utf-8 -*-
 2 import threading
 3 import time
 4 import traceback
 5 
 6 
 7 class MyThread(threading.Thread):
 8     """
 9         某個類沒有我要的方法,那麼可以重寫這個類,新增我需要的方法
10     """
11     def __init__(self, target=None, args=()):
12         super(MyThread, self).__init__
() 13 self.func = target 14 self.args = args 15 self.result = None 16 17 def run(self): 18 try: 19 self.result = self.func(*self.args) 20 except Exception: 21 print(traceback.print_exc()) 22 23 def get_result(self): 24 return
self.result 25 26 27 def tstart(arg, name): 28 for i in range(1,arg): 29 print(name + ' sleep ' + str(i) + ' second\n') 30 time.sleep(i) 31 return "%s running end" % name 32 33 34 if __name__ == '__main__': 35 task_list = [] 36 t1 = MyThread(tstart, args=(5, 'thread 1
')) 37 task_list.append(t1) 38 t1.start() 39 40 t2 = MyThread(tstart, args=(6, 'thread 2')) 41 task_list.append(t2) 42 t2.start() 43 44 for t in task_list: 45 t.join() 46 47 while len(task_list) != 0: 48 for t in task_list: 49 if not t.isAlive(): 50 result = t.get_result() 51 if result: 52 print(t.get_result()) 53 else: 54 print('create server error') 55 task_list.remove(t) 56 57 print("main func end")

其中MyThread中的get_result方法是threading.Thread中沒有的,是單獨新增的。