[Async-sig] asyncio <-> twisted interoperability

Guido van Rossum guido at python.org
Mon Jun 6 11:29:01 EDT 2016


On Sun, Jun 5, 2016 at 10:16 PM, Glyph <glyph at twistedmatrix.com> wrote:
>
> On Jun 4, 2016, at 13:25, Ben Darnell <ben at bendarnell.com> wrote:
>
> If things are so sensitive to minor changes in timing, doesn't that set the
> bar impossibly high for interoperability?
>
>
> The sensitivity is not to changes in timing - i.e. when the wall-clock runs,
> or ordering of non-deterministically ordered events - but rather to
> reentrancy - whether certain things complete synchronously while the caller
> is still on the stack and can depend on them having done so upon return.
>
> The recommended way of writing tests within Twisted these days depends
> heavily on `.callback´ synchronously resolving a Deferred, which is what
> adding a call_soon breaks.

That's interesting, and also potentially worrisome (for interop, I'm
not saying Twisted is wrong here).

I think asyncio depends on the opposite: that if you add a callback to
a Future that's ready it does *not* immediately run. Asyncio's promise
is pretty strongly that callbacks are serialized (no callbacks running
inside other callbacks). IIRC we experimented with other semantics and
found that it was harder to reason about. (IMO if you *know* a Future
is ready why add a callback to it rather than just calling the damn
thing if that's what you want?)

-- 
--Guido van Rossum (python.org/~guido)


More information about the Async-sig mailing list