2017-09-16 6 views
1

スレッドでWhile Trueループを実行し、time.sleep()関数を使用すると、ループはループを停止します。time.sleep blocks whileループ中のスレッド

私はこのコードを使用しています:私はこのコードを使用していたスレッドを起動するには

import threading 
from time import sleep 

class drive_worker(threading.Thread): 

    def __init__(self): 
     super(drive_worker, self).__init__() 
     self.daemon = True 
     self.start() 

    def run(self): 
     while True: 
      print('loop') 
      #some code 
      time.sleep(0.5) 

thread = drive_worker() 
+0

を終了するデーモンスレッドのメインスレッドを待機させますか? – roganjosh

+0

それはちょうどハングアップします。それは 'ループ'を印刷していないか何かをしています。 – MrPete

+2

そのコードは完全な例になっていますか? 'time.sleep'行は' NameError'を返します。また、スレッドが開始されると、スクリプトはただちに終了します。 – ekhumoro

答えて

2

あなたは

from time import sleep

01として sleepをインポート

はあなたがsleep(0.5)としてrun()に睡眠を呼び出す必要があります。また、私はお勧めしません

import time として輸入を変更する必要があります。

+1

なぜ 'import time'を使うのがお勧めですか? – RedEyed

+1

どちらも自分の長所と短所があります。 1つのアイテムだけを使用する必要がある場合は、OPがループの性質を実証していると仮定すると、パッケージ全体をインポートする必要はありません。あなたが時間から多くのアイテムをインポートする必要があるか、module_xと言う必要がある場合を除き、そうする理由はわかりません。また、 'module.item'とタイプすると本当に混乱することがあります。 :) –

+0

ええ、私のせいです。不必要な質問.. thx。 – MrPete

3

スレッドがdaemonとフラグを立てたため、ループが停止します。 実行中のデーモンスレッドのみが存在する場合、プログラムは終了します。

self.daemon = True # remove this statement and the code should work as expected 

それとも、「ループ停止する」とはどういう意味ですか

dthread = drive_worker() 
# no call to start method since your constructor does that 
dthread.join() #now the main thread waits for the new thread to finish 
関連する問題