On 29 Giu, 07:10, OdarR <olivier.da...@gmail.com> wrote: > On 28 juin, 23:26, Tomasz Pajor <ni...@puffy.pl> wrote: > > > Hello, > > > Configuration is as follows. > > > I have a starter process which creates 3 sub processes (forks) and each > > of this processes creates a number of threads. > > Threads in that processes have semaphore so on KeyboardInterrupt without > > sending a sigterm to the subprocess i'm not able to close threads. > > Is there any work around? Can I somehow run join for the thread on > > keyboard interrupt? > > When creating a thread you can add a Queue parameter to communicate > with threads:http://docs.python.org/library/queue.html > easy and reliable. > > give them a "poison pill" in the queue: a recognizable object placed > on the queue that means "when you get this, stop." >
This is the way I usually go, but it has one important limitation: if the thread is waiting for a blocking I/O operation to complete, like reading from a socket with no data or waiting for a locked resource (i.e. semaphore) to be unlocked, it will not service the queue and will not read the 'quit command' (the poison pill), and therefore will not quit until the blocking I/O terminates (and it could be never). ASAIK, there is no way - in python - to solve this. > Olivier Ciao ---- FB -- http://mail.python.org/mailman/listinfo/python-list