import threading
import time
import inspect
import ctypes
def_async_raise(tid, exctype):"""raises the exception, performs cleanup if needed"""
tid = ctypes.c_long(tid)
ifnot inspect.isclass(exctype):
exctype = type(exctype)
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, None)
raise SystemError("PyThreadState_SetAsyncExc failed")
defstop_thread(thread):
_async_raise(thread.ident, SystemExit)
defprint_time():while2:
print(111111111111)
print(222222222222)
print(333333333333)
print(444444444444)
print(555555555555)
print(666666666666)
if __name__ == "__main__":
t = threading.Thread(target=print_time)
t.start()
stop_thread(t)
print("stoped")
while1:
pass