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

如何在Python中停止线程中的for循环?,python,multithreading,loops,for-loop,break,Python,Multithreading,Loops,For Loop,Break,我试图用Python创建一个脚本来学习线程,但我似乎无法停止线程中的for循环。目前,我正在使用pyInstaller编译脚本并结束线程进程,我知道这不是最好的方法,有人能解释一下如何在命令上结束线程吗?我读过很多其他问题,但我似乎不明白如何以“正确”的方式停止线程。以下是我目前正在使用的代码来测试它: class Thread(Thread): def __init__(self, command, call_back): self._command = com

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

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中的GUI调用,目前还可以

如果您不想阅读所有这些内容,请直截了当地说:当Python中的线程中存在for循环时,如何以“正确的方式”停止线程?谢谢


编辑:对不起,我拉了我认为最重要的代码。相反,这里是完整的代码(这是一个文本消息,我正在使用它来学习Python,但是上面是我开始理解它之前第一次尝试线程化)

永远不要强行杀死线程。相反,使用线程定期检查的某种“信号”,如果设置了,那么线程会很好地完成

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

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

这里没有实际调用
test()
。请分享完整的相关代码。@Amber很抱歉,编辑了这篇文章。你必须杀死你的线程吗?你不能直接向他们发送循环退出信号吗?对不起,我是Python新手,我不需要杀死线程,我只是不知道如何让循环停止。但是,问题是,即使线程的进程被终止,循环也会继续运行。我会将代码移到run()下,并将for循环更改为一段时间吗?类对我来说非常混乱,对.self和init的基本解释也会很有帮助,谢谢。@一些程序员朋友在第三行“重写子类中的构造函数方法”中做了什么?