On Tue, Feb 3, 2015 at 11:56 PM, Yassine Chaouche <yacinechaou...@yahoo.com.dmarc.invalid> wrote: > But your comment is interesting because, as I understand it, a non-blocking > web server is simply a matter of setting timeouts on sockets, catch the > exceptions and move on. I don't know why wouldn't that be possible with > python stdlib ? >
Not really. You could, in theory, set very low timeouts and then poll everything, but it's not efficient. What you want to do is say to the system "Hey, see all these sockets? Let me know when *any one of them* has stuff for me", where "stuff" would be a new connected client if it's a listening socket, or some data written if it's a connected socket; and you might need to check if there's room to write more data, too, which you can do with the same syscall. The key here is that you have a long timeout on the meta-event "any one of these being ready". That's not simply a matter of setting socket timeouts; you need a way to handle the meta-event, and that's something along the lines of select(): http://linux.die.net/man/2/select Other languages have inbuilt asynchronous I/O handlers; eg Pike handles this fairly well, and I've made some use of it with a generic networking system: https://github.com/Rosuav/Hogan Basically, you spin up a server with any number of listening sockets, each of which can talk to any number of connected clients, and all of those sockets get smoothly multiplexed on a single thread. Lots of other languages have similar facilities. Python 2.x doesn't have anything of that nature; Python 3's asyncio is exactly that. ChrisA -- https://mail.python.org/mailman/listinfo/python-list