Understanding threading in Python
Krishna G. Pai explains Python threads at Linux Gazette:
When programming, in any language, the capability to spawn worker threads is integral to the performance of any application … threading is essential. This document attempts to show what is possible and what is not while threading in Python.
I’ve done some very simple threading in the past (for my never-finished IRC bot), and it seemed fairly straight forward. That was a big plus for me as far as Python goes.
See also: Thread module

Threading sux. All I can say about it. ;]
And autoreloaders from most of the web frameworks sux really hard when paired with user created threads (it requires some really not clean hacks to ensure you’ve got only one copy of your thread).
IMHO most of the problems that are solved by threads could be done with forking and would be more powerful (e.g. you can’t kill threads; no, it’s not because it’s not implemented, it’s impossible).
Hrm, in my application I had one thread reading in data from the IRC connection and putting it in a queue. Then I had another thread that would pop items off the queue and process them. Seemed to work for me.
This seams quite a good example of sane threading. ;] My problem was too much magic in all the code that I was using (web.py) which made the whole whing unpredictable. (and threads have made it much worse because there was no logical path through the program; debuging and interactive testing was also difficult)