pythonスレッド戻り値の取得
9643 ワード
pythonスレッド戻り値の取得機能実現前の準備コード threadingを書き換える.Threadクラス取得戻り値 ローカル変数を用いて戻り値 を取得する.
実装前の準備コード
今はthreadingでget_returnメソッドで戻り値を取得します.pythonのスレッドは通常、戻り値を取得できませんが、実際のアプリケーションでスレッドを開くと、戻り値を取得する必要があります.以下に、戻り値を取得する方法を2つ提供します.
上書きThreadクラス取得戻り値
この方法の欠点:速度が遅くて、偽のスレッドを開いたようで、慎重に使います.
ローカル変数を使用した戻り値の取得
ローカル変数を使用するには、ここでjoinを必要とします.そうしないと、プライマリスレッドが完了し、say_の一部がある可能性があります.helloの戻り値はリストにappendされていません.
この方法の欠点:戻り値がリストに追加されるなどのローカル変数に適用され、単一の戻り値の取得には適用されません.
実装前の準備コード
def say_hello(i):
return {"hello": i}
def threading_get_return():
vendorCode = []
for i in range(1000):
result = say_hello(i)
vendorCode.append(result)
if __name__ == '__main__':
threading_get_return()
今はthreadingでget_returnメソッドで戻り値を取得します.pythonのスレッドは通常、戻り値を取得できませんが、実際のアプリケーションでスレッドを開くと、戻り値を取得する必要があります.以下に、戻り値を取得する方法を2つ提供します.
上書きThreadクラス取得戻り値
import threading
class MyThread(threading.Thread):
def __init__(self, func, args):
threading.Thread.__init__(self)
self.func = func
self.args = args
self.result = self.func(*self.args)
def get_result(self):
try:
return self.result
except Exception:
# print(traceback.print_exc())
return "threading result except"
#
def say_hello(i):
return {"hello": i}
def threading_get_return():
vendorCode = []
for i in range(1000):
th = MyThread(say_hello, args=(i,))
th.start()
th_list.append(th)
for th in th_list:
th.join()
result = th.get_result()
vendorCode.append(result)
if __name__ == '__main__':
threading_get_return()
この方法の欠点:速度が遅くて、偽のスレッドを開いたようで、慎重に使います.
ローカル変数を使用した戻り値の取得
import threading
def say_hello(i, vendorCode):
# return {"hello": i}
vendorCode.append({"hello": i})
def threading_get_return():
vendorCode = []
for i in range(1000):
th = threading.Thread(say_hello, args=(i, vendorCode))
th.start()
th_list.append(th)
vendorCode.append(result)
# join
for th in th_list:
th.join()
if __name__ == '__main__':
threading_get_return()
ローカル変数を使用するには、ここでjoinを必要とします.そうしないと、プライマリスレッドが完了し、say_の一部がある可能性があります.helloの戻り値はリストにappendされていません.
この方法の欠点:戻り値がリストに追加されるなどのローカル変数に適用され、単一の戻り値の取得には適用されません.