[Twisted-Python] Getting a synchronous interface to a twisted reactor
Phil Mayers
p.mayers at imperial.ac.uk
Thu Apr 22 01:21:30 MDT 2010
On 04/22/2010 07:06 AM, Andrey Fedorov wrote:
> Thanks! The main reason for the question, though, is just curiosity from
> playing with and learning the Twisted API, not necessarily getting the
> example working :)
>
> A more direct question would have been - is there a Twisted reactor
> which provides a blocking call instead of a callback? Is there an
> accepted "best" way of wrapping an non-blocking async API with callbacks
> into a blocking synchronous one?
If I understand what you're asking you want to call Twisted code in the
following style:
def function():
# this code blocks
result = some_twisted_thing()
value = process(result)
final = morecode(value)
Rather than:
def function():
def = some_twisted_thing()
def.addCallback(process)
def.addCallback(morecode)
If that's the case, then the answer is "sort of" but I think you might
have misunderstood Twisted a bit. The entire point is to have
non-blocking APIs, not to want a blocking API.
You can't "really" block, because that stops the reactor from running,
and thus any networking events being handled.
You can emulate it in Python 2.5 with generators & a special decorator:
from twisted.internet import deferred
@deferred.inlineCallbacks
def function():
result = yield some_twisted_thing()
value = yield process(result)
final = yield morecode(value)
I might have misunderstood what you're asking though, in which case I
apologise, and can you be more specific?
More information about the Twisted-Python
mailing list