如何在Python中的线程中停止for循环?

问题描述:

我想在Python中创建一个脚本来学习线程和我似乎无法停止在线程循环。目前,我正在使用pyInstaller编译脚本并结束Thread过程,我知道这不是最好的方法,任何人都可以向我解释如何在命令上结束一个线程?我读过很多其他问题,但我似乎无法理解如何以“正确”的方式阻止线程。下面是我使用截至目前,以测试它的代码:如何在Python中的线程中停止for循环?

class Thread(Thread): 
     def __init__(self, command, call_back): 
     self._command = command 
     self._call_back = call_back 
     super(Thread, self).__init__() 

    def run(self): 
     self._command() 
     self._call_back() 
def test(): 
    i = 20 
    for n in range(0,i): 
     #This is to keep the output at a constant speed 
     sleep(.5) 
     print n 
def thread_stop(): 
    procs = str(os.getpid()) 
    PROCNAME = 'spam.exe' 
    for proc in psutil.process_iter(): 
     if proc.name == PROCNAME: 
      text = str(proc)[19:] 
      head, sep, tail = text.partition(',') 
      if str(head) != procs: 
       subprocess.call(['taskkill', '/PID', str(head), '/F']) 

的功能是由Tkinter的做了一个图形用户界面,这是罚款,现在叫。

如果你不想读这一切,给点意见:我如何停止一个线程“正确的方式”时,有一个在Python中的线程循环?谢谢!

编辑:对不起,我把我认为是最重要的代码。相反,这里是整个代码(这是我用来学习Python的文本消息器,但是在开始介绍它之前,上面是我的第一次尝试线程)。 http://pastebin.com/qaPux1yR

+0

这里没有什么实际调用'测试()'。请分享完整的相关代码。 – Amber 2012-08-13 06:03:49

+0

@Amber很抱歉,编辑了这篇文章。 – 2012-08-13 06:08:36

+0

你是否有杀死你的线程?你不能只发送他们的循环出口信号? – 2012-08-13 06:18:26

你不应该强行杀死一个线程。而是使用线程定期检查的某种“信号”,如果设置,线程就会很好地完成。

最简单的一种“信号”的是一个简单的布尔变量,并且可以使用这样的事情:

class MyThread(Thread): 
    def __init__(self): 
     self.continue = True 

    def run(self): 
     while (self.continue): 
      # Do usefull stuff here 
      pass 

    def stop(self): 
     self.continue = False 
+0

我会在run()下移动我的代码并将for循环更改为一段时间吗?类对我来说非常混乱,对.self和init的基本解释也会有帮助,谢谢。 – 2012-08-13 06:37:15

+0

@有些程序员伙计是你在第3行“重写子类中的构造函数方法”? – neoDev 2017-11-09 16:52:44