2016-06-29 10 views
1

私は、ユーザーが入力したピンを見つけるPythonを書いています.1つのこと以外はすべて正常に動作します。ピンが見つかるとスクリプトは存在しません。ピンを見つけたら、他のスレッドをすべて殺すことができる理由はありますか?ターゲットを見つけたらスレッドを停止するにはどうしたらいいですか?

#!/usr/bin/env python 
# 
# 
# 
from threading import Thread 
from random import randint 
from time import sleep 
from sys import exit 
from os import system 

system('clear');sleep(0.7) 
Pin = int(raw_input('Enter a pin: ')) 


def Up(): 
    global Pin 
    for pin in xrange(1111,10000): 
     system('clear') 
     print pin 
     if pin == Pin: 
      system('clear') 
      print 'U Pin Found: %d'%pin;sleep(0.7) 
      for i in range(3): 
       exit() 


def Down(): 
    global Pin 
    pins = xrange(10000) 
    for pin in reversed(pins): 
     system('clear') 
     print pin 
     if pin == Pin: 
      system('clear') 
      print 'D Pin Found: %d'%pin;sleep(0.7) 
      exit() 



def Random(): 
    global Pin 

    while True: 
     pins = randint(1111,10000) 
     print pins 
     if pins == Pin: 
      system('clear') 
      print 'R Pin Found: %d'%pins;sleep(0.7) 
      exit() 


Task1 = Thread(target=Up,args=()) 
Task2 = Thread(target=Down,args=()) 
Task3 = Thread(target=Random,args=()) 


Task1.start() 
Task2.start() 
Task3.start() 
+0

オフトピック:あなたは画面をクリアしている方法は非常に移植性がありません。 'os.system( 'clear')の代わりに' os.system( 'os.name ==' nt 'else' clear ') 'を使うことを検討してください。これはWindowsとLinuxの両方で動作します。 – martineau

+0

@martineauそして、私はまったくそれをやりません。私はそうすることにその点を見ません。 – glglgl

+0

@glglgl:私のコメントはあなたに向けられていませんでした。ポイントは_portability_です。これは、他のオペレーティングシステムの人々がコードを簡単に実行できるようにします(そしておそらく良い答えを提供します)。 – martineau

答えて

1

単純に終了することはできません。しかし、あなたは止めるように頼むことができます。例を参照してください。

from threading import Thread 
from random import randint 
from time import sleep 
from sys import exit 
from os import system 

system('clear');sleep(0.7) 
Pin = int(raw_input('Enter a pin: ')) 

terminateAll = false 

def Up(): 
    global Pin 
    for pin in xrange(1111,10000): 
     if terminateAll: 
      exit() 
     system('clear') 
     print pin 
     if pin == Pin: 
      terminateAll = true 
      system('clear') 
      print 'U Pin Found: %d'%pin;sleep(0.7) 
      for i in range(3): 
       exit() 


def Down(): 
    global Pin 
    pins = xrange(10000) 
    for pin in reversed(pins): 
     if terminateAll: 
      exit() 
     system('clear') 
     print pin 
     if pin == Pin: 
      terminateAll = true 
      system('clear') 
      print 'D Pin Found: %d'%pin;sleep(0.7) 
      exit() 



def Random(): 
    global Pin 

    while True: 
     if terminateAll: 
      exit() 
     pins = randint(1111,10000) 
     print pins 
     if pins == Pin: 
      terminateAll = true 
      system('clear') 
      print 'R Pin Found: %d'%pins;sleep(0.7) 
      exit() 


Task1 = Thread(target=Up,args=()) 
Task2 = Thread(target=Down,args=()) 
Task3 = Thread(target=Random,args=()) 


Task1.start() 
Task2.start() 
Task3.start() 
0

あなたがする必要があるすべては、それらを開始する前に、Trueに属性をするために彼らのdaemonを設定することで、スレッドオブジェクトにdaemonsを作るです。

デフォルト値はFalseです。メインプログラムスレッドが終了したときに実行中のデーモンスレッドは、自動的に終了します。

これを行うための論理的な場所である右の彼らのコンストラクタを呼び出した後:

... 
Task1 = Thread(target=Up,args=()) 
Task1.daemon = True 
Task2 = Thread(target=Down,args=()) 
Task2.daemon = True 
Task3 = Thread(target=Random,args=()) 
Task3.daemon = True 

Task1.start() 
Task2.start() 
Task3.start() 
関連する問題