2017-05-26 14 views
0

問題は、私は用語のGoogle検索で任意の 答えを見つけることができなかっただけということは比較的簡単です:raspberry pi 3でPythonでスレッドを終了するには?

  1. ループは、スレッドなどでキーボード入力を使用している間に終了する方法のpython
  2. にスレッドを終了させる方法

だから、プログラムの形式はこれです:私はプログラムeを実行したときにそう

import everything necessary 

def readingsomething(): 
     DOING SOME WORK in a infinite while loop and sleep for 1 sec 

def readingsomeotherthing(): 
    DOING SOME WORK in a infinite while loop and sleep for 2 sec 

thread1 = thread.thread(target = readingsomething) 

thread2 = thread.thread(target = readingsomeotherthing) 

try:  
    thread1.start() 
    thread2.start() 

    thread1.join() 
    thread2.join() 

except KeyboardInterrupt: 

    save a file and sys.exit() 

verythingは、私は私がそれらを保存することができませんように収集されたデータを失っていkeyboardInterrupt

あたりとして、それが終了していないCCTRL +を押し とき以外はスムーズです。

ご迷惑をおかけして申し訳ありません。

+0

こんにちは、スタックオーバーフローを歓迎します。あなたのコードをあなたの助けになる人のために読みやすくするために、投稿時には[適切な書式設定](https://stackoverflow.com/editing-help#code)を必ず使用してください。 –

+1

あなたのコードを適切にインデントしてください。そして、それはどういう問題なのでしょうか? –

+0

コードはエラーなしでコンパイルされて実行されていますが、ctrl + cを押すだけで終了しますが、停止せずに実行し続けます。関数のsleepコマンドによる問題だと思います –

答えて

0

あなたがしようとしていることは、はっきりしていません。 あなたはループについて話していますが、あなたのコードには何も見えません。

また、最初にthread1が停止するのを待ってから、thread2が停止するのを待って、必要なものがあることを確認します。

これらの「参加」の内部でタイムアウトを入れては、それ以外の場合は、例外のリスニングを防止し、呼び出します。

thread1.join() 

は、あなたがそれはあなたのコードに誘導変化について考えてよいでしょう

thread1.join(10) 

なり。

+0

提案していただきありがとうございます。 。 ループは定義された関数内にあります。 –

0

パイプに同期キューQueueを使用して、スレッドに値を送信できます。

0

ワーキングPythonの3例:パイソンでテスト

from threading import Thread, Event 
import time 

def readingsomething(stop): 
    while not stop.isSet(): 
     print('readingsomething() running') 
     time.sleep(1) 

def readingsomeotherthing(stop): 
    while not stop.isSet(): 
     print('readingsomeotherthing() running') 
     time.sleep(2) 

if __name__ == '__main__': 
    stop = Event() 
    thread1 = Thread(target=readingsomething, args=(stop,)) 
    thread2 = Thread(target=readingsomeotherthing, args=(stop,)) 
    thread1.start() 
    thread2.start() 

    try: 
     thread1.join() 
     thread2.join() 
    except KeyboardInterrupt: 
     print('catched KeyboardInterrupt') 
     stop.set() 
     #save the file 

    print('EXIT __main__') 

:3.4.2

+0

提案していただきありがとうございます。これを試してみます。 –

+0

私はpython3を使用しているので、 key = eval(input( 'ctl + cを終了してください'))、Cで無効な構文エラーが発生し続けます。理由を探す –

+0

@PradeepBV:作業例 – stovfl

関連する問題