python中如何中止一个线程
生活随笔
收集整理的這篇文章主要介紹了
python中如何中止一个线程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉載自:http://www.708luo.com/?p=30
?
class KillableThread(threading.Thread):"""A subclass of threading.Thread, with a kill() method."""
def __init__(self, *args, **keywords):
threading.Thread.__init__(self, *args, **keywords)
self.killed = False
def start(self):
"""Start the thread."""
self.__run_backup = self.run
self.run = self.__run # Force the Thread to install our trace.
threading.Thread.start(self)
def __run(self):
""" Hacked run function, which installs the trace."""
sys.settrace(self.globaltrace)
self.__run_backup()
self.run = self.__run_backup
def globaltrace(self, frame, why, arg):
if why == 'call':
return self.localtrace
else:
return None
def localtrace(self, frame, why, arg):
if self.killed:
if why == 'line':
raise SystemExit()
return self.localtrace
def kill(self):
self.killed = True
不過這個實現也有一個弊端:如果需要kill的線程正在sleep或者正阻塞在更底層的操作上,是沒有辦法立即kill掉的。
簡單來說,它kill的原理是設置一個flag位,然后線程在執行下一句python語句檢測到這個位被設置了之后,就會自行退出,以達到kill的目的。
?
另外還有一種更容易理解的flag置位的實現方式:
class KillableThread(threading.Thread):def __init__(self):
threading.Thread.__init__(self)
self.stop = False
def run(self):
while not self.stop:
somefunction()
這種方式相比第一種而言,又有一點不足:kill生效的時限,最大等于somefunction執行一遍所花的時間。
而第一種方式,在下一句python語句執行時就會生效。
不過可以料想,第一種實現方式,整體的執行效率會慢一點。因為每次執行一句python語句,都會有一個判斷的過程。
轉載于:https://www.cnblogs.com/wujianlundao/archive/2012/03/29/2424203.html
總結
以上是生活随笔為你收集整理的python中如何中止一个线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转载]WPF – 使用触发器
- 下一篇: GestureDetector.OnGe