Python 3.6系です。
このバージョンのPythonでサブのスレッドを実行して,
thread.join();
でメインスレッドをブロックせずにサブのスレッドが完了するまでメインスレッドをループさせたいと考えています。
ただ,ネット上で動作プログラムを調べてみるとほとんどがjoin()でメインスレッドをブロックさせているものばかりだったのですが
以下のようなプログラムでスレッドが完了するまでループさせる方法としては妥当でしょうか?
python
1 2""" 3マルチスレッドでjoinでメインスレッドをブロックせずに 4サブのスレッドが終了するまでメインスレッドには別のことをさせたい。 5""" 6import threading 7import time 8class MyThreadClass(threading.Thread): 9 10 #コンストラクタのオーバーライド 11 def __init__ (self, argument): 12 super().__init__(); 13 self.argument = argument; 14 self.fp = open("./thread.dat", "wb"); 15 pass 16 17 #runメソッド オーバーライド 18 def run(self): 19 print("コンストラクタの引数=>{}<=".format(self.argument)); 20 for i in range(10): 21 self.dummy_method(i); 22 time.sleep(3); 23 print("runメソッド実行完了"); 24 25 def dummy_method(self, i): 26 self.fp.write("実行順序 => {0}番目 \n".format(i).encode("UTF-8")); 27 28 #joinメソッドのオーバーライド 29 #作成したスレッドの完了時にはNoneではなく1を返却したい 30 def join(self, takes): 31 print(super().join(takes)); 32 print("マルチスレッド実行完了"); 33 self.fp.close() 34 return 1; 35 36 37th = MyThreadClass("マルチスレッドの開始"); 38th.start(); 39 40 41while(True) : 42 #スレッドが生存中の場合は常にTrueが返却される 43 if (th.is_alive() == True): 44 #print("スレッド生存中"); 45 #サブのスレッドが動いている限りメインスレッドでは別処理をさせたい。 46 pass 47 else: 48 if th.join() == 1: 49 break; 50 51print("マルチスレッドループ終了"); 52 53
上記のぷろぐらむではjoin()メソッドでNoneではなくてintの1を返したいと
仮定してjoinメソッドもオーバーライドしています。
windows端末では上記のソースは問題なくうごいたのですが
何か問題のある記述をしていたら指摘していただきたいです
参考までに「join()でメインスレッドをブロック」コードのURLを追記いただけないでしょうか?

回答1件
あなたの回答
tips
プレビュー