2017-09-26 13 views
0

スレッドを使用しているPythonスクリプトに問題があります。Python - 単純なスレッドは停止しません

from threading import Thread 

def func1(): 
    while True: 
     print 'Function 1' 

def main(): 
    t = Thread(target = func1) 

    t.start() 

    for i in xrange(100000): 
     print 'Main' 

    t.stop() 

    print 'End' 

if __name__ == '__main__': 
    main() 

私ははCtrl + Cか、その終わりに到達したとき、func1()を実行しているスレッドが停止することはありませんで、スクリプトを中断するときに問題がある:私は、次のコードに問題があることを模倣することができます。

端末を開くと実行を中断できますが、killall pythonです。

私はPythonでスレッドを扱うのは初めてです。私は間違って何をしていますか?

+1

Ctrl + Cはpython2上のスレッドを停止しません。 'Thread(target = func1、daemon = True) 'を使って' t'をデーモンスレッドにすることをお勧めします。 –

+0

これはうまくいきました。 't.dameon = True'とt.start()の前にデーモンにしなければなりませんでした。ありがとう@cᴏʟᴅsᴘᴇᴇᴅ! –

+0

コンストラクタ呼び出し中に初期化できるという印象を受けましたが、それも機能します。 –

答えて

1

私のアプローチは、(おそらく最高ではないが、それは動作します)です:

  1. それが停止した場合、スレッドのチェックが参照するという変数を持っています。
  2. メイン機能でctrl-cをキャッチします。
  3. catchされると、main関数は、スレッドが停止する必要があることを示す変数を設定します。
  4. メイン関数は、スレッドが完了するまで待つためにスレッド上でjoin()を呼び出します。
  5. スレッドは変数をチェックし、変数が設定されていることを確認して戻ります(停止します)。
  6. join()が返され、メイン関数を終了できます。
関連する問題