class sample_thread:
def __init__(self):
self._running = True
def stop(self):
self._running = False
def run():
try:
do something
except:
do something
self._running = False
finally:
do something
self._running = False
所以这是我的线程类。 我有最多2个线程(不包括主要)运行,并希望在一段时间后停止它们,如果它们没有完成。
def stop_thread(p):
print(time.time()-p['start'])
if time.time() - p['start'] > 240:
try:
p['thread_name'].stop()
do something more
p['thread_instance'].join(10)
if p['thread_instance'].is_alive():
print('[-] Thread should be dead, but is still alive. Try again later')
p['thread_name'].stop()
p['thread_instance'].join(10)
return False
else:
print('[+] Failed thread successful stopped')
return True
except:
print('[-] Error occured in stop_thread')
'p'是一个关于线程的一些信息的dict(开始时间,名称,实例等)。 所以我的问题基本上是,当出现意外情况并且代码进入if子句时,我无法再停止该线程。无论多久返回一次False并通过stop_thread函数。 任何想法我的代码有什么问题,或者我如何修复它并可靠地杀死我的线程? 我很乐意为你提供帮助! 提前谢谢
答案 0 :(得分:0)
你无法从另一个Python线程中杀死Python线程。此外,如果你试图杀死与你相同的进程中的另一个Python线程,你最终可能会自杀。您只能请求线程停止通过您已设置的某个消息频道。
例如,您可以考虑将queue
传递给线程:
class SampleThread():
def __init__(self, q):
self.q = q
def run(self):
while True:
do_some_work()
if not self.q.empty():
return