Tornado Web Server

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

Hello, world

以下は、Tornadoのシンプルな「Hello, world」のWebアプリの例です。

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でインストールできます。ソースディストリビューションには、Tornadoをこの方法でインストールした場合には存在しないデモアプリケーションが含まれているため、ソース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はWindowsをサポートするasyncioに基づいて構築されていますが、TornadoはWindowsでスケーラブルなネットワークに必要なAPIを使用していません)。

ドキュメント

このドキュメントはPDFおよびEpub形式でも利用できます。

議論とサポート

Tornadoに関する議論はTornado開発者メーリングリストで、バグ報告はGitHubのissueトラッカーで行うことができます。追加のリソースへのリンクはTornado wikiにあります。新しいリリースはアナウンスメントメーリングリストで告知されます。

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

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