23 lines
812 B
Python
23 lines
812 B
Python
import ctypes
|
|
|
|
|
|
def terminate_thread(thread):
|
|
"""Terminates a python thread from another thread.
|
|
|
|
:param thread: a threading.Thread instance
|
|
"""
|
|
if not thread.isAlive():
|
|
return
|
|
|
|
print('valet watcher thread: notifier thread is alive... - kill it...')
|
|
exc = ctypes.py_object(SystemExit)
|
|
res = ctypes.pythonapi.PyThreadState_SetAsyncExc(ctypes.c_long(thread.ident), exc)
|
|
if res == 0:
|
|
raise ValueError("nonexistent 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(thread.ident, None)
|
|
raise SystemError("PyThreadState_SetAsyncExc failed")
|
|
print('valet watcher thread exits')
|