>I don't really think the ability to "create magic stackless mixin classes" 
>should be a driving principle for the stdlib.
> I would suggest using a proper non-blocking framework such as Twisted.

There is a lot of code out there that uses SocketServer.  It was originally 
designed to be easily extensable, with various mixins to control ultimate
Behavior.  It just seems that there have been some design decisions made 
recently that make this subclassability / extensibility more difficult, and 
those
Are the two changes I pointed out.  The thing with the select.select wouldn't 
be so bad if I could simply override serve_forever but that function
Can't be overridden because of the poor choice of adding __attributes to the 
class.

And, you would run into the same kind of trouble if you wanted to create a 
TwistedMixIn, a geventMixIn, or what not.

> In case you didn't notice, the built-in timeout support *also* uses select().
Yes, that's how the normal blocking framework supports timeout.  Asynchronous 
frameworks do it differently, though.

> Then they should also replace the select module.
> Again, I don't think SocketServer (or any other stdlib module) should be 
> designed in this regard.

And so we do too, but now every socket accept requires two rounds round the 
event loop.  Also, emulating select() is not a critical part of frameworks 
designed to help you avoid to use it in the first place.  The point of 
frameworks such as gevent, stackless, etc, is to let you write code with 
zillions of sockets without ever touching select.  The quick and dirty emulated 
version I use, uses a thread to make it non-blocking!

It just seems odd to me that it was designed to use the "select" api to do 
timeouts, where timeouts are already part of the socket protocol and can be 
implemented more efficiently there.

Anyway, I'm not talking about rewriting anything, I merely want to fix some 
small design problems that prevent SocketServer to be specialized.  I'll submit 
a simple patch for review.

K
-----Original Message-----
From: python-dev-bounces+kristjan=ccpgames....@python.org 
[mailto:python-dev-bounces+kristjan=ccpgames....@python.org] On Behalf Of 
Antoine Pitrou
Sent: 14. mars 2012 02:02
To: python-dev@python.org
Subject: Re: [Python-Dev] SocketServer issues

On Wed, 14 Mar 2012 04:26:16 +0000
Kristján Valur Jónsson <krist...@ccpgames.com> wrote:
> Hi there.
> I want to mention some issues I've had with the socketserver module, and 
> discuss if there's a way to make it nicer.
> So, for a long time we were able to create magic stackless mixin 
> classes for it, like ThreadingMixIn, and assuming we had the 
> appropriate socket replacement library, be able to use it nicely using 
> tasklets.

I don't really think the ability to "create magic stackless mixin classes" 
should be a driving principle for the stdlib.
I would suggest using a proper non-blocking framework such as Twisted.

> So, my first question is:  Why not simply rely on the already built-in 
> timeout support in the socket module?

In case you didn't notice, the built-in timeout support *also* uses select().

Regards

Antoine.


_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/kristjan%40ccpgames.com


_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to