On 8/9/06, Nick Coghlan <[EMAIL PROTECTED]> wrote: > That check is already there: > > 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; if it returns a number > greater than one, you're in trouble, and you should call it again with exc set > to NULL to revert the effect. This raises no exceptions. New in version 2.3.
Note that it is intentionally not directly accessible from Python -- but this can be revised. > In Python 2.5, you can use ctypes to get at the whole C API from Python code, > and calling thread.get_ident() in the run() method will allow you to find out > the thread id of your thread (you'll need to save that value somewhere so > other code can get at it). > > All Tober is really asking for is a method on threading.Thread objects that > uses this existing API to set a builtin ThreadExit exception. The thread > module would consider a thread finishing with ThreadExit to be > non-exceptional, so you could easily do: > > th.terminate() # Raise ThreadExit in th's thread of control > th.join() # Should finish up pretty quickly > > Proper resource cleanup would be reliant on correct use of try/finally or with > statements, but that's the case regardless of whether or not asynchronous > exceptions are allowed. I'm +0 on this. -- --Guido van Rossum (home page: http://www.python.org/~guido/) _______________________________________________ Python-3000 mailing list [email protected] http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com
