On Tue, Nov 1, 2011 at 10:06 AM, Phil Mayers <p.may...@imperial.ac.uk> wrote: > On 01/11/11 16:58, Itamar Turner-Trauring wrote: >>> I find the "pass reactor as 1st argument to everything" API pattern >>> messy. I'm sure there's a good reason. What is it? >> >> 1. Supporting multiple reactors. > > Interesting. I had assumed that was a "never on the cards" option. Would > it be possible to "nest" the reactors, or would they have to run in > separate threads? Or is this speculative? > >> >> 2. Unit testing: if you have an explicit object, you can replace it more >> easily with a fake. > > Ok. I realise it's a bit late in the day at this point, but I do wonder > if something like: > > def method(arg, reactor=DefaultReactor): > ... > > ...with DefaultReactor being some kind of lazy singleton or weak > reference might not have been a more friendly pattern to API users. > > As it is, I might bind a keystroke to "reactor, " ;o)
Singletons are an anti-pattern. Because the reactor is a singleton: * We can't have multiple reactors instantiated * We can't restart reactors * We can't isolate certain reactor-dependent unit tests * We have to install reactors, which requires careful ordering of imports In Bravo, Exocet is used to set up a pseudo-sandbox. If reactor were not a singleton, I could isolate people's usage of Twisted calls, and force them to proxy everything. Instead, I have to grant them access to the reactor, because it's shared global state. Is this horribly important? No, but it does prohibit more effective sandboxing and isolation. Exocet needs to keep a list of modules which are so fucked that they must be allowed to touch sys.modules to work correctly. There are two things in that list: os.path and twisted.internet.reactor. Also, the reactor only works if it's imported before Exocet. While Exocet's not exactly a bastion of sanity, this doesn't speak well of the magic that the reactor goes through in order to advertise itself globally. Those are my reasons. They're not superb reasons from a getting-shit-done point of view, but from a reducing-cyclopean-horrors point of view, I think they're worth considering. ~ C. -- When the facts change, I change my mind. What do you do, sir? ~ Keynes Corbin Simpson <mostawesomed...@gmail.com> _______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python