import threading
import time
import inspect
import ctypes
def _async_raise(tid, exctype):
"""Raises an exception in the threads with id tid"""
if not inspect.isclass(exctype):
raise TypeError("Only types can be raised (not instances)")
res = ctypes.pythonapi.PyThreadState_SetAsyncExc(ctypes.c_long(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, None)
raise SystemError("PyThreadState_SetAsyncExc failed")
else:
print("555555555555555555")
def stop_thread(thread):
print("thread.ident is ", thread.ident)
_async_raise(thread.ident, SystemExit)
class TestThread(threading.Thread):
def run(self):
print("begin run the child thread")
number = 0
while True:
time.sleep(1)
number += 1
print("sleep 1s number is :", number)
if __name__ == "__main__":
print("begin run main thread")
t = TestThread()
t.start()
time.sleep(3)
stop_thread(t)
print("main thread end")
python 主线程中杀死之前创建的某个线程
最新推荐文章于 2022-12-18 14:45:39 发布