On 13 Jan, 11:31 pm, [email protected] wrote:

On Jan 12, 2014, at 4:42 PM, johnnadre <[email protected]> wrote:

---- On Sun, 12 Jan 2014 14:03:24 -0800 <[email protected]> wrote ----
On 09:01 pm, [email protected] wrote:

Hi,

I want to exit my application immediately when CTRL+C is pressed,
however reactor hangs when there are running threads.
Some of these threads have blocking I/O, so I can't simply set a
variable or wait for them to terminate. An example application would
be:

Python threads (being plain old operating systems; for example, POSIX
threads) aren't generally interruptable.  You could try exiting the
entire process using `os._exit`.

Well, there's always pthread_kill, now exposed as os.pthread_kill on Python 3.3, but ... don't do that. Nothing good will come of it.
This is the case whether you're using Twisted or not.

Thanks! That's exactly what I was looking for.

If you need to use os._exit, your application probably has a bug :-).

(Not to say you should never use it, but any time you use it you should be simultaneously looking into why you need to.)

-glyph

I think you may as well say the same about needing to use threads. The needs are pretty closely related, anyway.

Consider an application that uses twisted.enterprise.adbapi to talk to a SQL server, is running when the network suffers a failure that leaves a cursor waiting for data from the server, and then the user decides they want to exit the application.

Most likely the cursor will block forever on a recv() call, the thread it runs in will never proceed, and the process will never exit.

Whether this is a bug or an unavoidable consequence of doing blocking I/O using POSIX threads or both...

Jean-Paul

_______________________________________________
Twisted-Python mailing list
[email protected]
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

Reply via email to