我创建了一个python thread.One通过调用它的start()方法来运行,我监视线程内的falg,如果那个标志== True,我知道用户不再希望线程继续运行,所以我懒得做房子清洁并终止线程。
但是我无法终止该线程。我试过thread.join(),thread.exit(),thread.quit(),都抛出异常。
这是我的线程的样子。
编辑1:请注意在标准run()函数中调用core()函数,我在这里没有显示它。
编辑2:当StopFlag为true时我刚刚尝试了sys.exit(),看起来线程终止了!可以安全使用吗?
class workingThread(Thread):
def __init__(self, gui, testCase):
Thread.__init__(self)
self.myName = Thread.getName(self)
self.start() # start the thread
def core(self,arg,f) : # Where I check the flag and run the actual code
# STOP
if (self.StopFlag == True):
if self.isAlive():
self.doHouseCleaning()
# none of following works all throw exceptions
self.exit()
self.join()
self._Thread__stop()
self._Thread_delete()
self.quit()
# Check if it's terminated or not
if not(self.isAlive()):
print self.myName + " terminated "
# PAUSE
elif (self.StopFlag == False) and not(self.isSet()):
print self.myName + " paused"
while not(self.isSet()):
pass
# RUN
elif (self.StopFlag == False) and self.isSet():
r = f(arg)
答案 0 :(得分:3)
这里有几个问题,也可能是其他问题,但如果你没有展示整个程序或特定的例外,这是我能做的最好的事情:
简单示例:
import threading
import time
class MyThread(threading.Thread):
def __init__(self):
super(MyThread,self).__init__()
self.count = 5
def run(self):
while self.count:
print("I'm running for %i more seconds" % self.count)
time.sleep(1)
self.count -= 1
t = MyThread()
print("Starting %s" % t)
t.start()
# do whatever you need to do while the other thread is running
t.join()
print("%s finished" % t)
输出:
Starting <MyThread(Thread-1, initial)>
I'm running for 5 more seconds
I'm running for 4 more seconds
I'm running for 3 more seconds
I'm running for 2 more seconds
I'm running for 1 more seconds
<MyThread(Thread-1, stopped 6712)> finished
答案 1 :(得分:0)
没有明确的方法来杀死线程,无论是从对线程实例的引用还是从线程模块的引用。
话虽这么说,运行多个线程的常见用例确实有机会阻止它们无限期地运行。例如,如果您通过urllib2与外部资源建立连接,则可以始终指定超时:
import urllib2
urllib2.urlopen(url[, data][, timeout])
套接字也是如此:
import socket
socket.setdefaulttimeout(timeout)
请注意,调用指定超时的线程的join([timeout])方法只会阻塞hte超时(或直到线程终止。它不会终止该线程。
如果要确保线程在程序完成时终止,只需确保在调用它的start()方法之前将线程对象的守护进程属性设置为True。