Synchronous ComponentsΒΆ
AsyncObject
are used everywhere in pulsar.
These objects expose the _loop
attribute as discussed in the
design documentation.
Normally, the _loop
is a running event loop controlled by an
Actor
.
In this case, all operations which requires the loop, are carried out
asynchronously as one would expect.
However, sometimes it can be useful to have
AsyncObject
which behaves in a synchronous fashion.
Pulsar achieves this by using a new event loop for that object.
For example, this statement creates a synchronous HttpClient
:
>>> from pulsar import new_event_loop
>>> from pulsar.apps import http
>>> client = http.HttpClient(loop=new_event_loop())
>>> client._loop.is_running()
False
You can now execute synchronous requests:
>>> response = client.get('https://pypi.python.org/pypi/pulsar/json')
Under the hood, pulsar treats a synchronous request exactly in the same way as
an asynchronous one with the only difference that the
event loop
is always used via the run_until_complete()
method to wait for the response to be available.