Table Of Contents

Previous topic

Usage

Next topic

API

This Page

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)