- コードがこのデコレータを使用していない場合、それはノンブロッキングですか?
- この名前が非同期である理由は、デコレータを追加してコードを非同期にすることを意味するのですか?
- @tornado.gen が常に @tornado.web.asynchronous と一緒に使用するのはなぜですか?
3 に答える
@tornado.web.asynchronous
RequestHandler
がを自動的に呼び出すのを防ぎself.finish()
ます。それでおしまい; これは、Tornado が手動で呼び出すまで接続を開いたままにすることを意味しますself.finish()
。
このデコレーターを使用しないコードは、ブロックすることも、ブロックしないこともできます。デコレータを使用しても、それはまったく変わりません。
@Steve Peakが言ったように、データベースの取得などの非同期リクエストにはデコレータを使用します。
Tornado 3.1+ 用に更新: を使用する場合、同様
@gen.coroutine
に使用する必要はありません。@asynchronous
古い@gen.engine
インターフェイスにはまだ が必要@asynchronous
だと思います。
ここで回答:非同期 vs ノンブロッキング
このように考えてください。データを取得するためにデータベースまたは別の URL を要求する必要がある場合、tornado IO をブロックしたくありません。その
@tornado.web.asynchronous
ため、コンテンツ (データベースや URL など) がロードされるのを待っている間、IO が他の要求を処理できるようになります。それらは似ています。ほとんどの場合、 を使用します
@tornado.web.asynchronous
。