On Sun, Sep 18, 2011 at 07:35:01AM +1000, Chris Angelico wrote: > On Sun, Sep 18, 2011 at 5:00 AM, Nobody <nob...@nowhere.com> wrote:
> Forking a thread to discuss threads.... ahem. > > Why is it that threads can't be killed? Do Python threads correspond > to OS-provided threads (eg POSIX threads on Linux)? Every OS threading > library I've seen has some way of killing threads, although I've not > looked in detail into POSIX threads there (there seem to be two > options, pthread_kill and pthread_cancel, that could be used, but I've > not used either). If nothing else, it ought to be possible to > implement a high level kill simply by setting a flag that the > interpreter will inspect every few commands, the same way that > KeyboardInterrupt is checked for. > > Is it just that nobody's implemented it, or is there a good reason for > avoiding offering this sort of thing? Python has a half baked solution to this. If you go to http://docs.python.org/release/3.2.2/c-api/init.html You will find the following: int PyThreadState_SetAsyncExc(long id, PyObject *exc) Asynchronously raise an exception in a thread. The id argument is the thread id of the target thread; exc is the exception object to be raised. This function does not steal any references to exc. To prevent naive misuse, you must write your own C extension to call this. Must be called with the GIL held. Returns the number of thread states modified; this is normally one, but will be zero if the thread id isn’t found. If exc is NULL, the pending exception (if any) for the thread is cleared. This raises no exceptions. Some recipes can be found at: http://www.google.com/search?ie=UTF-8&oe=utf-8&q=python+recipe+PyThreadState_SetAsyncExc However it this doesn't work 100% correctly. Last time I tried using this, it didn't work with an exception instance but only with an execption class as parameter. There was a discussion at http://mail.python.org/pipermail/python-dev/2006-August/068158.html about this. I don't know how it was finaly resolved. -- Antoon Pardon -- http://mail.python.org/mailman/listinfo/python-list