[Twisted-web] Having reactor run at the main thread make
things harder for late adopters
amcnabb at mcnabbs.org
Thu Nov 6 13:46:01 EST 2008
On Thu, Nov 06, 2008 at 02:55:37AM -0000, glyph at divmod.com wrote:
> This is almost certainly true, and as I've already said I am keenly
> interested in de-globalizing the reactor myself; making it easier to
> test things is a key reason for doing so. However, we should be aware
> of the risks and try to mitigate them. It could well be that we could
> come up with an API which is smooth as glass for the "good" use-cases we
> have in mind here, and raises exceptions or emits helpful warnings when
> used for the "bad" ones. Maybe that's not possible, maybe we can only
> get halfway there: but it would be nice to try.
I think we really agree for the most part.
>> - k threads that each have their own reactor
> This is a whole other, almost unrelated can of worms. You can only use
> Twisted from one thread at a time. There are things which make
> assumptions about non-reentrancy and mutual exclusion of global module-
> level state. You can find and fix every instance of this if you want,
> but don't bundle it in with multiple reactors :).
Now that you mention that, I have noticed that a few times when reading
Twisted code. I think that long-term, it's nice to remove global
module-level state wherever possible, but in the meantime, just putting
the above paragraph in the docs as a warning is probably sufficient.
>> 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. :)
> Another bogus argument. There are lots of things that are "impossible"
> in Python. For example, you "can't" change the values of a tuple, or
> the contents of a string. I mean, there's terrible stuff you can do
> with ctypes, but if it breaks, you get to keep both pieces. Similarly,
> there are lots of things that already kind of work, by accident, if you
> instantiate multiple reactors; you can kind of re-set a reactor if you
> know exactly what to twiddle.
Let me rephrase that, then. I think that in Python, the goal is usually
to create a flexible API and to document how it should be properly used
rather than creating barriers to stop people from doing something just
because it might be a bad idea in some contexts.
> When I say it's nice to be able to say that something's impossible, that
> doesn't mean that I don't want to support all the reasonable use-cases,
> just that boundaries are a useful tool. This is very much the Python
> idiom - consider your options for indenting your code in strange ways,
> for example :).
Again, I think we agree for the most part.
PGP Fingerprint: 8A17 B57C 6879 1863 DE55 8012 AB4D 6098 8826 6868
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Size: 197 bytes
Desc: not available
Url : http://twistedmatrix.com/pipermail/twisted-web/attachments/20081106/3c22bd6b/attachment.pgp
More information about the Twisted-web