【Python】python獲取執行緒的返回值的方法

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