2016-06-29 117 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() 
相关问题