【问题标题】:How to stop a for loop in a thread in Python?如何在 Python 的线程中停止 for 循环?
【发布时间】:2012-08-13 14:30:33
【问题描述】:

我正在尝试在 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 的文本消息器,但上面是我在开始理解它之前第一次尝试线程)。 http://pastebin.com/qaPux1yR

【问题讨论】:

  • 这里实际上没有调用test()。请分享完整的相关代码。
  • @Amber 抱歉,编辑了帖子。
  • 杀死你的线程吗?你不能只给他们发送循环退出信号吗?
  • 对不起,我是 Python 新手,我不必杀死线程,我只是不知道如何使循环停止。然而,这样做的问题是,即使线程的进程被杀死,循环也会继续进行。

标签: python multithreading loops for-loop break


【解决方案1】:

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

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

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

【讨论】:

  • 我是否可以将我的代码移到 run() 下并将 for 循环更改为一段时间?类让我很困惑,对 .self 和 init 的基本解释也会有所帮助,谢谢。
  • @Some 程序员老兄是你在第 3 行“覆盖子类中的构造函数方法”所做的事情?
猜你喜欢
  • 2013-08-03
  • 2022-01-11
  • 2018-10-14
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多