Asynchronous Support¶
gntplib.async
provides support for asynchronous processing built on
Tornado.
Publisher¶
AsyncPublisher
provides asynchronous methods:
register()
and
publish()
.
These methods are inherited from Publisher
directly.
Note that they are asynchronous methods especially when you use them in a row.
register()
returns regardless of wheather
the REGISTER
request has been received by the GNTP server, so successive
publish()
method call is possible to fail
due to unregistered application or notification name.
To avoid this, pass publish()
method call
to callback
keyword argument as callback function:
>>> publisher = AsyncPublisher('App', ['Async Event'])
>>> def my_callback(ignored):
... publisher.publish('Async Event', 'Title')
>>> publisher.register(callback=my_callback)
Or use Tornado’s gen.Task
syntax like this:
>>> @gen.engine
... def async_publish():
... publisher = AsyncPublisher('App', ['Async Event'])
... yield gen.Task(publisher.register)
... publisher.publish('Async Event', 'Title')
Subscriber¶
AsyncSubscriber
provides asynchronous method
subscribe()
, which is inherited
from Subscriber
directly.
Resource¶
AsyncResource
is a lazy resource.
Before request dispatching, the resource data is fetched asynchronously
from the url passed to the constructor.
You can use AsyncResource
instead of
Resource
in AsyncPublisher
or AsyncSubscriber
:
>>> icon = AsyncResource('http://example.org/icon.png')
>>> resource = AsyncResource('http://example.org/resource.pdf')
>>> publisher = AsyncPublisher('App', ['Async Event'],
... custom_headers=[('resource', resource)])
>>> publisher.publish('Async Event', 'Title', icon=icon)