目次

前のトピックへ

使い方

次のトピックへ

API

このページ

非同期処理のサポート

gntplib.asyncTornado を使った非同期処理をサポートしています。

Publisher

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')

Subscriber

AsyncSubscriber は非同期メソッドの subscribe() を提供します。これは Subscriber からそのまま継承されています。

リソース

AsyncResource は遅延リソースです。リクエストを送出する前に、コンストラクタで渡された URL からリソースデータが非同期にフェッチされます。

AsyncResource は、AsyncPublisher または AsyncSubscriberResource の代わりに使うことができます。

>>> 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)