IME in many of these cases you're better off using asyncio instead.

-- Ryan
https://refi64.com/
On Jun 20, 2019, 12:14 AM -0500, Matúš Valo <matusvalo@gmail.com>, wrote:
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 -- python-ideas@python.org
To unsubscribe send an email to python-ideas-leave@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/ZDERRWIBX7JP5F2VRTTGD4OMCUSMH3QB/
Code of Conduct: http://python.org/psf/codeofconduct/