python在一个线程中杀死另外一个线程
发布时间:2020-05-25 00:59:37 所属栏目:Python 来源:互联网
导读:python在一个线程中杀死另外一个线程
|
下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。 脚本之家小编现在分享给大家,也给大家做个参考。 import threading
import inspect
import ctypes
def _async_raise(tid,exctype):
"""raises the exception,performs cleanup if needed"""
if not inspect.isclass(exctype):
raise TypeError("Only types can be raised (not instances)")
res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid,ctypes.py_object(exctype))
if res == 0:
raise ValueError("invalid thread id")
elif res != 1:
# """if it returns a number greater than one,you're in trouble,# and you should call it again with exc=NULL to revert the effect"""
ctypes.pythonapi.PyThreadState_SetAsyncExc(tid,0)
raise SystemError("PyThreadState_SetAsyncExc failed")
class Thread(threading.Thread):
def _get_my_tid(self):
"""determines this (self's) thread id"""
if not self.isAlive():
raise threading.ThreadError("the thread is not active")
# do we have it cached?
if hasattr(self,"_thread_id"):
return self._thread_id
# no,look for it in the _active dict
for tid,tobj in threading._active.items():
if tobj is self:
self._thread_id = tid
return tid
raise AssertionError("could not determine the thread's id")
def raise_exc(self,exctype):
"""raises the given exception type in the context of this thread"""
_async_raise(self._get_my_tid(),exctype)
def terminate(self):
"""raises SystemExit in the context of the given thread,which should
cause the thread to exit silently (unless caught)"""
self.raise_exc(SystemExit)
>>> import time >>> from thread2 import Thread >>> >>> def f(): ... try: ... while True: ... time.sleep(0.1) ... finally: ... print "outta here" ... >>> t = Thread(target = f) >>> t.start() >>> t.isAlive() True >>> t.terminate() >>> t.join() outta here >>> t.isAlive() False 以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。 如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
