An almost always better choice is using epoll -- it's usually faster and can handle any number of concurrent sockets (up to a million and more).
* http://docs.python.org/library/select.html#edge-and-level-tr...
* http://scotdoyle.com/python-epoll-howto.html
* http://blog.urbanairship.com/blog/2010/08/24/c500k-in-action...
* http://www.metabrew.com/article/a-million-user-comet-applica...
Python, like many languages, seems to just defer to the OS select(), so a good read for parties interested are the man pages and maybe something like Beej's Guide to Networking.
Have you looked at eventlet or gevent? They're libraries in Python for doing single-threaded networking (like Twisted) but in a very lightweight and pleasant way. They use coroutines, so you can usually write code as if it were blocking, and you can use the standard library networking functions with non-blocking magic sprinkled on top. I've found it to be remarkably straightforward.