[Tutor] demon / app I/F better way ?
Lloyd Kvam
pythonTutor at venix.com
Mon Nov 15 18:25:22 CET 2004
Eric Raymond in "The Art of Unix Programming" claims that UNIX
developers tend to dislike threads. He cites the Ousterhout article:
http://www.cs.utah.edu/~regehr/research/ouster.pdf
as an argument against threads.
Martelli in "Python in a Nutshell" provides detailed threading
recommendations. These parallel Kent's recommendations of using the
Queue module and if carefully followed should give you a reliable
program.
I have to confess that I tend to avoid threads myself.
On Sun, 2004-11-14 at 14:13, Kent Johnson wrote:
> I don't think any of the complications Alan suggests are needed. The
> Queue module takes care of the necessary locking semantics. It is
> specifically intended for inter-thread communication. From the docs:
>
> The Queue module implements a multi-producer, multi-consumer FIFO queue.
> It is especially useful in threads programming when information must be
> exchanged safely between multiple threads. The Queue class in this
> module implements all the required locking semantics.
>
> On a side note...
> I'm starting to think there is a cultural bias against threads in the
> python community. I came to Python from Java where threads are commonly
> used. For example the Jetty web server is a threaded web server that is
> used in many production environments. I'm not sure there are any
> industrial-strength Python web servers that use a threading model - they
> are either based on asyncore or forking.
>
> This is the second time I have suggested a threaded solution to a
> problem posted on this list. Each time someone has fired back a reply
> about the difficulties of threading. The replies surprise me because in
> my experience, simple uses of threads can be, well, simple. Yes, there
> are dangers, and certainly it can be hard to wrap your head around a
> threaded app, but with a little care and the help of some library
> classes you can get a lot done easily.
>
> I'm not sure where I'm going with this except maybe, "Hey, guys, lighten
> up a little! Threads can be your friends!"
>
> Kent
>
> Alan Gauld wrote:
> >>Having decided on threading the demon, and using a fifo, the queue
> >>module looks cool, I have one last dilema. One that quite often
> >
> > causes
> >
> >>me problems, that scope, namespace thing ;-)
> >
> >
> > To be honest the risks of deadlocks and race conditions using
> > multiple threads accessing a common queue are such that I would
> > tend to have the data collection thread writing to a separate
> > queue (out of a pool of queues) from the processing thread.
> > I'd then switch queues on each data change leaving the processor
> > reading a queue which has no risk of being overwritten by the
> > collector thread. I'd keep a status map of the queues such that
> > the collector marks them as full and the processor marks them
> > as empty. This way they avoid trampling on each other and if
> > the pool gets to the state of all full you can flag an error
> > and stop processing or dump it to a file before restarting
> > or whatever...
> >
> _______________________________________________
> Tutor maillist - Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
--
Lloyd Kvam
Venix Corp
More information about the Tutor
mailing list