[Python-Dev] threadsafe patch for asynchat (original) (raw)

Josiah Carlson jcarlson at uci.edu
Wed Feb 8 01:57:15 CET 2006


Guido van Rossum <guido at python.org> wrote:

IMO asynchat and asyncore are braindead. The should really be removed from the standard library. The code is 10 years old and represents at least 10-year-old thinking about how to do this. The amount of hackery in Zope related to asyncore was outrageous -- basically most of asyncore's guts were replaced with more advanced Zope code, but the API was maintained for compatibility reasons. A nightmare.

I'm going to go ahead and disagree with Guido on this one. Before removing asyncore (and asynchat) from the standard library, I believe that there would necessarily need to be a viable replacement already in place. The SocketServer module and its derivatives are wholly unscalable for server-oriented applications once you get past a few dozen threads (where properly designed asyncore derivatives will do quite well all the way to your platform file handle limit).

Every once and a while I hear about people pushing for Twisted to be included with Python, but at 2 megs for the base bz2 package, it seems a little...hefty. I'm not aware of any other community-accepted package for asynchronous socket clients and servers, but I'm always looking.

Now, don't get me wrong, writing servers and clients using asyncore or asynchat can be a beast, but it does get one into the callback/reactor method of programming, which seems to have invaded other parts of Python and 3rd party libraries (xml.sax, tk, Twisted, wxPython, ...).

Back to the topic that Guido was really complaining about: Zope + asyncore. I don't doubt that getting Zope to play nicely with asyncore was difficult, but it begs the questions: what would have been done if asyncore didn't exist, and why wasn't that done instead of trying to play nicely with asyncore?



More information about the Python-Dev mailing list