Hi All,
Currently it is not possible to "kill" thread which is blocked. The rationale
for this is handling situations when thread is blocked - e.g. when thread is
quering DB when lock occurred on Database. In this case, the main thread has no
way how to stop the blocked thread. Killing a thread is also popular question -
see [1][2].
pthread library and Windows API contains mechanisms for forced termination of
threads - see [3] and [4]. It is also simple to use them using ctypes library
but after this action one need to "clean" internal data structures which is bad
practice:
import time
import threading
import ctypes
def handler():
# blocked thread handler
time.sleep(1000)
t = threading.Thread(name='bar', target=handler)
libpt = ctypes.cdll.LoadLibrary("libpthread.so.0")
t.start()
libpt.pthread_cancel(ctypes.c_ulong(t.ident))
# This is nasty cleaning of internal python structures
del threading._active[t.ident]
Is if feasible to add canceling threads to python threading library? I am
willing to help creating a patch (at least for linux).
[1] https://stackoverflow.com/questions/323972/is-there-any-way-to-kill-a-thread
[2] https://www.geeksforgeeks.org/python-different-ways-to-kill-a-thread/
[3] http://man7.org/linux/man-pages/man3/pthread_cancel.3.html
[4]
https://docs.microsoft.com/en-us/windows/desktop/api/processthreadsapi/nf-processthreadsapi-terminatethread
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/ZDERRWIBX7JP5F2VRTTGD4OMCUSMH3QB/
Code of Conduct: http://python.org/psf/codeofconduct/