add killthread function, make Task killable; Task daemonizes per default

This commit is contained in:
2021-02-08 10:54:04 +00:00
parent b565c46178
commit 6d6b4e0d51
2 changed files with 30 additions and 2 deletions
+23
View File
@@ -0,0 +1,23 @@
import ctypes
set_async_exc = ctypes.pythonapi.PyThreadState_SetAsyncExc
def killthread(thread, exc=KeyboardInterrupt):
if not thread.is_alive():
return
ident = ctypes.c_long(thread.ident)
exc = ctypes.py_object(exc)
res = set_async_exc(ident, exc)
if res == 0:
raise ValueError("thread id does not exist")
elif res > 1:
# if return value is greater than one, you are in trouble.
# you should call it again with exc=NULL to revert the effect.
set_async_exc(ident, None)
raise SystemError("PyThreadState_SetAsyncExc failed")