当社はIT技術のオンライン教育を得意としたセミナー専門会社です。 | 一戸英男

ITエンジニアの技術力UPをお約束します。

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

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

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

Bottleをマルチスレッドで動作させるモジュールは色々ありますが古くからあり使いやすいのがpasteモジュールです。今回はpasteモジュールのインプリメントを見ていきましょう。
※2023/03/8 にPasteWebサーバの設定方法を刷新しました。ログ出力も対応しています。画面とファィルに出力されます。後半のRocketServerは既に古くてpython3.6以前でないと動作しないと思います。

pasteモジュールの導入

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

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

makoテンプレートエンジンを使っていますので、テンプレートはPython3 Bottleフレームワーク入門(その1)で紹介しているものをそのまま使ってください。

負荷テスト

nperfを使って負荷テストをしてみましょう。-cが並行スレッド数で-nがテストの回数です。

◯ nperfのインストール



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

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

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

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

ログ出力の機能を加えました。Apacheのログ形式で実行ディレクトリ上のrocket.logに吐き出されます。
ちなみにport番号の後にサーバ証明書、プライベート鍵を記述するとHTTPS対応になりますので是非トライしてみてください。
Apacheサーバでリバースプロキシー連携するならSSLはApache側に持たせたほうが絶対に良いです。理由は細かいSSLオプション関連の制御ができるからです。

サーバの実行



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操作関連