gntplib.async は Tornado を使った非同期処理をサポートしています。
AsyncPublisher は非同期メソッドを提供します。register() と publish() です。これらのメソッドは Publisher からそのまま継承されています。
特にそれらのメソッドを連続して使うときには非同期メソッドであることに注意してください。REGISTER リクエストが GNTP サーバに受信されたかどうかに関わらず register() は制御を返すので、その次の publish() メソッド呼び出しが、未登録のアプリケーションまたは通知タイプ名として失敗する可能性があります。
これを避けるには、publish() メソッド呼び出しをコールバック関数として callback キーワード引数に渡します。
>>> publisher = AsyncPublisher('App', ['Async Event'])
>>> def my_callback(ignored):
... publisher.publish('Async Event', 'Title')
>>> publisher.register(callback=my_callback)
または Tornado の gen.Task 構文を使います。
>>> @gen.engine
... def async_publish():
... publisher = AsyncPublisher('App', ['Async Event'])
... yield gen.Task(publisher.register)
... publisher.publish('Async Event', 'Title')
AsyncSubscriber は非同期メソッドの subscribe() を提供します。これは Subscriber からそのまま継承されています。
AsyncResource は遅延リソースです。リクエストを送出する前に、コンストラクタで渡された URL からリソースデータが非同期にフェッチされます。
AsyncResource は、AsyncPublisher または AsyncSubscriber で Resource の代わりに使うことができます。
>>> 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)