Tornado Web Server

Tornado は、Python の Web フレームワークであり、非同期ネットワークライブラリです。元々は FriendFeed で開発されました。ノンブロッキングネットワーク I/O を使用することで、Tornado は数万ものオープン接続にスケールでき、ロングポーリングWebSocket、その他各ユーザーとの長期間接続を必要とするアプリケーションに最適です。

Hello, world

Tornado のシンプルな「Hello, world」例を示します。

import asyncio
import tornado

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

async def main():
    app = make_app()
    app.listen(8888)
    await asyncio.Event().wait()

if __name__ == "__main__":
    asyncio.run(main())

この例では、Tornado の非同期機能は使用していません。それについては、この シンプルなチャットルーム を参照してください。

スレッドと WSGI

Tornado は、ほとんどの Python Web フレームワークとは異なります。WSGI に基づいておらず、通常はプロセスあたり 1 つのスレッドのみで実行されます。Tornado の非同期プログラミングへのアプローチの詳細については、ユーザーガイド を参照してください。

tornado.wsgi モジュールでは WSGI のサポートが一部提供されていますが、開発の焦点ではなく、ほとんどのアプリケーションは WSGI を使用する代わりに、Tornado 独自のインターフェース(tornado.web など)を直接使用するように記述する必要があります。

一般的に、Tornado コードはスレッドセーフではありません。他のスレッドから安全に呼び出すことができる Tornado の唯一のメソッドは IOLoop.add_callback です。IOLoop.run_in_executor を使用して、ブロッキング関数を別のスレッドで非同期的に実行することもできますが、run_in_executor に渡される関数は、Tornado オブジェクトへの参照を避ける必要があります。run_in_executor は、ブロッキングコードとやり取りするための推奨方法です。

asyncio 統合

Tornado は標準ライブラリの asyncio モジュールと統合されており、同じイベントループを共有します(Tornado 5.0 以降はデフォルト)。一般的に、asyncio での使用を目的としたライブラリは、Tornado と自由に混ぜて使用できます。

インストール

pip install tornado

Tornado は PyPI に登録されており、pip でインストールできます。ソース配布物には、このようにインストールされた場合に存在しないデモアプリケーションが含まれているため、ソースの tarball をダウンロードするか、git リポジトリ をクローンすることをお勧めします。

**前提条件**: Tornado 6.3 は Python 3.8 以降が必要です。以下のオプションパッケージが役立つ場合があります。

  • pycurl は、オプションの tornado.curl_httpclient によって使用されます。Libcurl バージョン 7.22 以上が必要です。

  • pycares は、スレッドが適切でない場合に使用できる代替のノンブロッキング DNS リゾルバーです。

**プラットフォーム**: Tornado は Unix 系プラットフォーム向けに設計されており、epoll (Linux)、kqueue (BSD/macOS)、または /dev/poll (Solaris) をサポートするシステムで最高の性能とスケーラビリティを発揮します。

Tornado は Windows でも動作しますが、この構成は正式にはサポートされておらず、本番環境での使用は推奨されていません。Windows では一部の機能が欠落しており(マルチプロセスモードを含む)、スケーラビリティも制限されています(Tornado は asyncio 上に構築されており、Windows をサポートしていますが、Tornado は Windows でスケーラブルなネットワーキングに必要な API を使用していません)。

ドキュメント

このドキュメントは、PDF と Epub 形式 でも入手できます。

ディスカッションとサポート

Tornado については Tornado 開発者メーリングリスト で議論したり、GitHub の issue トラッカー でバグを報告したりできます。追加のリソースへのリンクは Tornado wiki にあります。新しいリリースは アナウンスメーリングリスト で発表されます。

Tornado は Apache License, Version 2.0 のもとで利用可能です。

このウェブサイトとすべてのドキュメントは Creative Commons 3.0 のもとでライセンスされています。