pythonマルチスレッド取得関数の戻り値

8343 ワード

welcome to my blog
スレッドを作成する方法は2つあります.1.クラスをカプセル化し、そのクラスにthreadingを継承する.Threadクラス2.メソッド名とパラメータをThread()のコンストラクション関数に渡す.
クラスにカプセル化すると、サブスレッドの戻り値が取得されます.
具体例:4つのスレッドでそれぞれ4つのリストの要素の平方値を計算する
import threading
import random


class MyClass(threading.Thread):
    # woc,         res????     python     ! 666      :     : class  ,   class     ,       
    # res = []

    def __init__(self, arr):
        super().__init__()
        self.arr = arr
        #   res           !
        self.res = []

    def calPow(self):
        print('       :', threading.current_thread().getName())
        for i in self.arr:
            self.res.append(i*i)

    def run(self):
        self.calPow()

    def getRes(self):
        return self.res


def main():
    #   4    5 list,    4        4 list      
    arrs = [[random.randint(1, 15) for x in range(5)] for x in range(4)]
    jobs = []
    print('
4 list:'
) for i in range(4): print(arrs[i]) # 4 print('
4 :'
) for i in range(4): t = MyClass(arrs[i]) jobs.append(t) t.start() result = [] # print('
'
) for t in jobs: # t.join() # result.append(t.getRes()) print('
:'
) for i in result: print(i) if __name__ == '__main__': main()

基礎知識、この小さな例を書く時自分の知識の抜け穴を発見しました
pythonの4の変数タイプ、原文リンク1、グローバル変数:モジュール内、すべての関数の外、classの外、これがグローバル変数です.2、局所変数:関数内、classのメソッド内(self修飾なし)、これが局所変数3、静的変数:class内であるがclassのメソッド内ではない、これが静的変数4、インスタンス変数:classのメソッド内でself修飾された変数であり、これがインスタンス変数である