杀死一个特定的线程Python
答
要做到这一点,最好的方法是使用线程定期检查的退出标志,并在设置后退出。当你需要杀死线程时,你可以设置这个标志并等待线程自行退出。
This answer有关于为什么强行杀死线程的其他信息是一个坏主意,以及上述方法的Python实现。
答
我发现如果您定义了一个带有self.flag
变量的Threading类,并且让该函数调用该类的函数,则可以在特定于线程的实例上设置该标志并使用if语句退出特定的线程。
不难想象这更加动态,并且允许产生和关闭线程。
class AutoPilotThreader(threading.Thread):
def __init__(self, threadID, name):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.flag = 0
def run(self):
print "Starting " + self.name
self.SelTestRun()
print "Exiting " + self.name
def SelTestRun(self):
# do code
while 1:
if self.flag:
return
else:
time.sleep(1)
my_threads = []
t1 = AutoPilotThreader(1, "t1")
t2 = AutoPilotThreader(2, "t2")
t1.start()
t2.start()
my_threads.append(t1)
my_threads.append(t2)
while 1:
print("What would you like to do: 1. Quit 2. Start New 3. Check")
choice = input("Enter : ")
if choice == 1:
choice = input(" 1 or 2 or 3 ")
if choice == 1:
t1.flag = 1
elif choice ==2:
t2.flag = 1
elif choice ==3:
t3.flag = 1 .........
如果您必须杀死一个线程才能让程序正常工作,那么您正在执行一些非常错误的操作*。 – 2012-08-07 21:40:17
定期循环检查一些布尔变量,让它成为'proceed'。在主线程中,当另一个线程停止时,设置“proceed = False”;它会在下一次迭代时停止。 – 9000 2012-08-07 21:43:18
你能更详细地描述这个问题吗?也许有更好的解决方案。我的意思是肯定有比杀死线程更好的解决方案。但是,也许你可以使用threading.Lock()对象来解决你的问题 – 2012-08-07 21:59:51