[Twisted-web] Having reactor run at the main thread make things harder for late adopters

Andrew McNabb amcnabb at mcnabbs.org
Wed Nov 5 16:19:25 EST 2008

On Wed, Nov 05, 2008 at 07:24:31PM -0000, glyph at divmod.com wrote:
> I completely agree, architecturally speaking, for Twisted, that this is  
> a good idea.  I already linked to  
> <http://twistedmatrix.com/trac/ticket/3205> in this thread, which is a  
> broad outline of my long-term plan to eliminate the reactor's singleton-  
> ness.

Thanks.  I must have missed the link earlier.

> On the other hand, the approach you're describing here, using Twisted  
> "just a little", starting up a reactor and spinning it in some obscure  
> corner of an application, is basically an architectural antipattern,  
> which should be avoided as much as possible.

I agree that it should be avoided as much as possible, but I don't think
that it should be impossible to do.  Suppose, for example, that you are
refactoring a project to use Twisted.  It's nice to be able to use it
just a little, then iteratively add more to it.  I agree that you
shouldn't stay in this state long, but it sure would be a nice crutch
during refactoring.

> I can definitely think of a few "larger projects" - names withheld to  
> protect the guilty - whose designs have been influenced and  
> rehabilitated by their decision to use Twisted.  I worry about making it  
> easier to throw Twisted into a situation where it will make the overall  
> design of a system into even more of an incomprehensible mess.  Just  
> imagine trying to decipher a GUI project using Twisted for networking,  
> where there are 3 or 4 different global reactors, each of which is used  
> by a different window or dialog box, and you have to figure out which  
> one you need based on what context your Twisted-using code is running  
> in.

Give me any API, and I can create a program that misuses it. :)

I'm guessing that the GUI project would be much more decipherable if
instead of having 3 or 4 global reactors, there were 3 or 4 reactors
that were nicely encapsulated.  Anyway, if there's a good reason for
having 3 or 4 reactors, I'm sure there's a good way to organize the code
so that things don't get out of hand.

I think the following use cases for mutliple reactors outweigh the
potential risks:
- starting and stopping a reactor multiple times, particularly for
- making it easier to refactor existing code to use the reactor pattern
- k threads that each have their own reactor

And I'm sure we could come up with others.

> It's nice to be able to say "you can't do that, it's impossible", when  
> someone asks how to set up something like that.

If I wanted to be constantly told "you can't do that, it's impossible",
I wouldn't be a Python guy.  If I want to shoot myself in the foot,
that's my problem.  :)

Andrew McNabb
PGP Fingerprint: 8A17 B57C 6879 1863 DE55  8012 AB4D 6098 8826 6868
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: not available
Url : http://twistedmatrix.com/pipermail/twisted-web/attachments/20081105/02eac900/attachment.pgp

More information about the Twisted-web mailing list