add killthread function, make Task killable; Task daemonizes per default
This commit is contained in:
@@ -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")
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user