2016-06-29 114 views
1

所以我寫了一個python,它能夠找到用戶輸入的內容,除了一件事情之外,一切正常,而且這就是腳本一旦找到就不會存在。有沒有爲什麼我可以殺死所有其他線程,一旦我找到了引腳?一旦找到我的目標,我該如何停止線程?

#!/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('cls',如果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

所有你需要做的是使線程設置自己daemon歸因於True前開始他們的對象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() 
相關問題