Shutting down a cross-platform multithreaded app
Akira Li
4kir4.1i at gmail.com
Fri Sep 18 19:56:17 EDT 2015
"James Harris" <james.harris.1 at gmail.com> writes:
...
> Needless to say, on a test Windows machine AF_UNIX is not present. The
> only cross-platform option, therefore, seems to be to use each
> subthread's select()s to monitor two AF_INET sockets: the one to the
> client and a control one from the master thread. I would seem to need
> IP socket pairs between the master thread and the subthreads. If the
> master thead receives a shutdown signal it will send a shutdown
> command to each subthread.
There is socket.socketpair() on Windows too (since Python 3.5)
https://docs.python.org/3/library/socket.html#socket.socketpair
http://bugs.python.org/issue18643
Note: you could use select() to handle signals in the main thread too
(even on Windows since Python 3.5) if you use signal.set_wakeup_fd()
https://docs.python.org/3/library/signal.html#signal.set_wakeup_fd
It is known as a self-pipe trick
http://www.sitepoint.com/the-self-pipe-trick-explained/
Look at *asyncio* source code, to see how to get a portable
implementation for various issues with signals. Some issues might still
be opened e.g., Ctrl+C behavior
http://bugs.python.org/issue24080
Here's how to combine SIGCHLD signal handling with tkinter's event
loop
http://stackoverflow.com/questions/30087506/event-driven-system-call-in-python
SIGCHLD, createfilehandler() are not portable but the code demonstrates
possible set_wakeup_fd() issues and their solutions (O_NONBLOCK, dummy
signal handler, SA_RESTART, signal coalescing).
On threads and signals in CPython
http://bugs.python.org/issue5315#msg102829
More information about the Python-list
mailing list