2017-08-23 11 views
0
class MyClass(): 
    def __init__(self): 
     ... 

    def start(self): 
     colorThread = threading.Thread(target = self.colorIndicator()) 
     colorThread.start() 

     while True: 
      print ('something') 
      ... 
      ... 

私はcolorIndicator()の中にprintステートメントもあります。その声明は印刷されています。しかし、start()メソッドのwhileループ内のprintステートメントは画面に表示されません。スレッドはプロセスをブロックしているようです

colorIndicator()にも無限ループがあります。それはインターネットからいくつかのデータを取得し、カウンタを更新します。このカウンタは__init__の中でselfという変数で初期化されています。この変数は他のメソッドで使用しています。

中になぜprintが実行されていないのか分かりません。

colorIndicator機能:

def colorIndicator(self): 
     print ('something else') 
     ... 
     while (True): 
      ... 
      print ('here') 
     time.sleep(25) 

私が手出力は次のようになります。

something else 
here 
here 

私はその後、それを止めました。したがって、colorIndicatorは完全に完全に実行されています。 私はimportでPythonインタプリタ(端末内)でスクリプトを呼び出しています。次にMyClassをインスタンス化し、start関数を呼び出します。

+0

'colorIndicator'関数を投稿できますか? – Skam

+0

@Skam今投稿しました。 – aste123

+0

申し訳ありません、あなたの 'main'関数、またはあなたが提供する出力を与えるこのクラスとそのメソッドを呼び出しています – Skam

答えて

2

あなたではなく、スレッドtargetとして(差し出がましい)メソッド自体を渡すよりも、メインスレッドでそれを呼ばれるので、あなたが実際に、スレッド内colorIndicatorを実行していません。変更:

colorThread = threading.Thread(target=self.colorIndicator()) 
    #              ^^ Agh! Call parens! 

へ:

基本的に
# Remove parens so you pass the method, without calling it 
    colorThread = threading.Thread(target=self.colorIndicator) 
    #              ^Note: No call parens 

、あなたの問題はあなたがThreadを構築する前に、それはtargetとして、その戻り値を使用することができますので、完了までcolorIndicatorを実行しようとしているということです複数の方法で間違っています(このメソッドは決して返されません。たとえそれがあったとしても、それはtargetとして使用するのに適した呼び出し可能な呼び出しを返しません)。

関連する問題