- コードがこのデコレータを使用していない場合、それはノンブロッキングですか?
- この名前が非同期である理由は、デコレータを追加してコードを非同期にすることを意味するのですか?
- @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。