SEO対策とセキュリティで企業をバックアップします。

インターネット上のアクセスボリュームUPをお約束します。

Python3 Bottleフレームワーク入門(その7)- マルチスレッドWEBサーバ(Paste,Rocket)

Python3 Bottleフレームワーク入門(その7)- マルチスレッドWEBサーバ(Paste,Rocket)


今回の記事ではBottleのWEBサーバについて解説していきたいと思います。Bottleの標準で用意されているWEBサーバはシングルスレッドのWSGIサーバ(wsgirefサーバ)です。Bottleに限らずほとんどの様々な言語のフレームワークはテスト用にシングルスレッドのWEBサーバが用意されています。あくまでも開発中に作ったものを確認するために用意されたものです。しかし、マルチスレッドでもう少し挙動を確認したい場合もあるはずです。やはりシングルとマルチではプログラムの作り方が根本的に違います。故にマルチスレッドでの動作ができる内部連携するWSGI WEBサーバをご紹介します。

マルチスレッドpasteモジュール

Bottleをマルチスレッドで動作させるモジュールは色々ありますが古くからあり使いやすいのがpasteモジュールです。今回はpasteモジュールのインプリメントを見ていきましょう。
※2020/01/17 にマルチスレッドRocket Webサーバで対応させる方法も合わせて追加しました。ログ出力(Apache形式)も対応しています。

pasteモジュールの導入

まず最初にpasteモジュールを導入します。

簡単なマルチスレッド起動のコーディングを書く

負荷テストでマルチスレッドとシングルスレッド比較

nperfを使ってマルチスレッドとシングルスレッドの負荷テストをしてみましょう。1ページのコンテンツのボリュームを多くすると差異が出やすいと思います。少しだと出にくいです。-cが並行スレッド数で-nがテストの回数です。

◯ シングルスレッドのプログラム

◯ nperfのインストール



pasteサーバの別の呼び出し方

Rocketを使ったマルチスレッド対応

最近使った感じではこちらのRocketの方がpasteより良い感じ。pasteはPython2.7からPython3.xの対応が中途半端でエラーを吐くことがあるのでメンテがいまいち。Rocketも最新バージョンがバグがありエラーとなるのでpipから導入したものは動作しません。まともにうごくバージョン(1.2.4)で利用すると良いです。

Rocketサーバのインストールとロギング機能の設置

Rocketを使ったマルチスレッドサーバ(server.py)のソースコード

ログ出力の機能を加えました。Apacheのログ形式で実行ディレクトリ上のrocket.logに吐き出されます。
ちなみにport番号の後にサーバ証明書、プライベート鍵を記述するとHTTPS対応になりますので是非トライしてみてください。

サーバの実行



Python Bottle Framework入門 全13回
1.基礎編サーバ起動
2.リクエストメソッド
3.ORM Peewee (MySQL)
4.ORM Peewee CRUD
5.Cookie And Session
6.Abort and Redirect
7.マルチスレッドWEBサーバ
8.デーモン化
9.Json
10.WSGI on SSL
11.Apache連携起動(外部WSGI) SSL接続
12.Apache連携起動(ReverseProxy)SSL接続
13.hprox連携起動(ReverseProxy)SSL接続&HTTP2対応

合わせて読みたいPython MySQL操作関連

タグ: , , ,