Python3:如何停止/杀死线程

时间:2019-11-01 11:40:58

标签: python python-3.x multithreading

我的代码运行N个线程。我想在某些情况下停止特定线程,但其余线程应继续运行。每个线程完成工作后,我都会执行一些操作。有没有一种方法可以停止在Python 3中运行线程。

我当前的代码是在Python2中实现的,该代码通过“ _Thread__stop()”来实现。 Python3中有什么相同的东西吗?

2 个答案:

答案 0 :(得分:0)

实践是“到”完成线程的“信号”,然后该线程需要退出。这不是像杀死进程那样杀死用户,而是线程函数的常规状态机行为。

例如,假设您的线程正在运行。您应该在循环内插入一条if语句,以指示线程函数中断或返回 if stop is Truestop变量应该是与主线程(或需要停止线程的线程)共享的变量,该变量会将其更改为True。通常在此之后,停止线程将要等待join()

完成线程

答案 1 :(得分:0)

杀死线程是一个坏习惯,最好是创建一个“标志”,它会在线程完成工作时告诉您。 考虑以下示例:

import threading
import random

class CheckSomething(threading.Thread):
    def __init__(self, variable):
        super(CheckSomething, self).__init__()
        self.start_flag = threading.Event()
        self.variable = variable

    def check_position(self, variable):
        x = random.randint(100)
        if variable == x:
            self.stop_checking()

    def run(self):
        while True:
            self.check_position(self.variable) 

    def stop_checking():
        self.start_flag.set()

    def stopped():
        return self.start_flag.is_set()

Event()的set()方法将其状态设置为True。您可以在文档中阅读更多内容:https://docs.python.org/3.5/library/threading.html

因此,当您遇到要退出的条件时,需要调用stop_checking()。