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

标签 python multithreading loops for-loop break

我正在尝试在 Python 中创建一个脚本来学习线程处理,但我似乎无法停止线程中的 for 循环。目前,我正在使用 pyInstaller 编译脚本并结束 Thread 进程,我知道这不是最好的方法,有人可以向我解释如何根据命令结束线程吗?我已经阅读了许多其他问题,但我似乎无法理解如何以“正确”的方式停止线程。这是我目前用来测试它的代码:

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

最佳答案

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

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

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

关于python - 如何停止 Python 线程中的 for 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11928882/

相关文章:

python - WxPython:子窗口中的多个小部件

python - 使用 python 需求文件,您可以控制安装包依赖项的顺序吗?

python - 扭曲的 self.transport.write() - Python - 附加输出

python argparse 字符串列表的选择接受唯一的部分列表元素

java - 为多线程 REST API 客户端设计

c++ - 在线程退出时重生线程

python pandas 无法使用重复的键进行组装

java - 请帮助我理解这个死锁示例

r - 寻找 "vectorized"版本来存储矩阵中向量元素的差异

Javascript 循环的异步行为