Python には多くの Web 開発フレームワークがあります。コードを作成した後は、デプロイと起動が重要です。一般的に、Web アプリケーションは 3 層構造の Web サーバー ---->アプリケーション -----> です。サーバー
主流の Web サーバーは、Apache、lighttpd、nginx、iis
アプリケーションと数えられます。中国語名はアプリケーション サービスと呼ばれ、特定の Web フレームワークに基づいて作成するアプリケーション コードです。 Web開発では一般にストレージサービスを指しますが、近年ではWebサイト規模の拡大に伴い、Webサーバーのフロントに配置されるMemcacheやRedisなどのキーバリューストレージも普及しています。 . Web サーバーは静的ファイルを効率的に処理し、IO とファイル転送を最適化してネイティブ関数を開発および呼び出します
単純なネットワーク ファイアウォールとして機能し、いくつかの IP をダンプしたり、同時接続数を制御したりすることができます。何もしないよりは良いです
高い同時実行性の短いメッセージの処理 接続リクエストは、イントラネット上の数十の長い接続を介して何千ものユーザーのリクエストを転送します。その理由の 1 つは、Web サーバーが高い同時性を処理するのに非常に優れているためです。ほとんどのアプリケーションで使用されるフレームワークには、高い同時実行性を処理する機能が備わっていません
実際、市場の一部の Web フレームワークは、epoll/ などの効率的なネットワーク ライブラリのサポートが組み込まれているため、高い同時性を処理する機能を備えています。 kqueue (Python の tornado、Java ベースの Tomcat、jetty など)。フロントエンド Web サーバーを削除して裸で実行する人もいます。ただし、この 2 つの理由から、パブリック ネットワーク アプリケーションを展開する場合は、これを行わないことをお勧めします。上記の理由から、ユーザーのブラウザから Web サーバーまでのネットワーク状態はあらゆる種類の奇妙であり、使用できません。 ご想像のとおり、
Web サーバーは 3 つの理由から nginx の使用を強くお勧めします
優れたパフォーマンスと非常に安定した
簡単な操作インストールと依存パッケージはほとんどありませんconf ファイルの設定は非常に簡単で、apache/lighttpd よりも簡単です
Python で開発された Web プログラムをデプロイします 9 つのメソッドがあります
mod_python (Apache の組み込みモジュール) に大きく依存します。 Python のバージョン mod_python は、apache での使用は推奨されていません。nginx は cgi をサポートしていません。これは、lighttpd または apache
fastcgi を使用する方法です。現在最も一般的な方法は、flup モジュールでサポートされています。これは、lighttpd インストール パッケージに含まれている fastcgi_pass
spawn-fcgi という構成命令です。違いは、flup は Python コード レベルで導入され、spawn-fcgi は外部プログラムであることです。 spawn-fcgi は非常に多用途であり、php、python、perl などのあらゆる言語で開発されたコードをサポートできます。コードが fastcgi インターフェイスを実装している限り、プロセスの管理に役立ちます。正式名は
scgi です。シンプルな共通ゲートウェイインターフェイス。scgi プロトコルは非常にシンプルですが、nginx の対応する設定コマンドは scgi_pass です。必要に応じて、Flup もサポートします。
http、nginx は proxy_pass 転送を使用します。これには、バックエンド アプリケーションに高い同時実行性を処理できる組み込みの http サーバーが必要です。Python プログラマーは発明を好みます。ホイール、トルネードは Web フレームワークだけでなく、独自に高性能な http サーバーも提供できるため、ボトルなどの他の Python フレームワークを使用してコードを作成することもできます。 -tornado をインポートすることでパフォーマンス http サーバーを使用することもできます。プロトコルは nginx と一緒にデプロイされます。さらに詳しく見ると、Python パッケージには gevent など、高い同時実行性を処理できる http サーバーが多数あり、http デプロイメントをサポートするために他のフレームワークから参照することもできます。
実際には、Javaを使用してWebプログラムを作成する場合、通常、アプリケーションサーバーはTomcatまたはjetty
uwsgiを選択します。これは、
uwsgiプロトコル
Webサーバー組み込みサポートプロトコルの4つの部分で構成されます。モジュールアプリケーション サーバー プロトコル サポート モジュール
プロセス制御プログラムnginx には、0.8.4 以降、uwsgi プロトコルのサポートが組み込まれており、4 バイトのヘッダーと本体をパッケージにすることができます。 http、cgi などの多くのプロトコル (ヘッダー フィールド内でマークされています) を使用して小規模なパフォーマンス比較テストを行ったことがありますが、その結果は、fastcgi と比較して、uwsgi に明らかなパフォーマンス上の利点がないことを示しています。データセットが小さい理由は、プロセス制御プログラムが付属しており、実際には spawn-fcgi/php-fpm に似た natvie 関数を使用していることです。したがって、uwsgi は、(Python、lua、ruby、erlang、go) などを含むさまざまなアプリケーション フレームワークをサポートできます。 uwsgi に似たツールである Gunicorn は、rails デプロイメント ツール (Unicorn) から移植されています。ただし、使用するプロトコルは WSGI で、正式名は Python Web サーバー ゲートウェイ インターフェイスであり、python2.5 で定義された公式標準 (PEP 333) です。これには適切なルーツがあり、http://gunicorn を導入するのは比較的簡単です。 org/ 詳細なチュートリアルがありますmod_wsgi、WSGI プロトコルもサポートする Apache のモジュール、https://code.google.com/p/modwsgi/
fastcgi プロトコルと http プロトコルの長所と短所の比較コードのデプロイメント
fastcgi はバイナリ プロトコルですが、http プロトコルと比較してリソースを節約しません。バイナリ プロトコルは、1234567 などの数値表現のみを保存できます。文字列として表現するには 7 バイト、数値として表現するには 4 バイトかかります。文字列はどこでも同じです
fastcgi がデータを送信するとき、 CGI プロトコルと互換性があること。また、大量の CGI 環境変数を用意する必要があるため、http プロトコルと比較すると、fastcgi を使用してデータを送信するのは経済的ではなく、より高価です
fastcgi の唯一の利点は、 Fastcgi は、バックエンド アプリケーションに転送するために 10 個のリンクを使用するだけで、必要なだけ指定でき、1000 個のリクエストが開始されます。問題は、ローカルで新しい接続を作成すると、TCP プロトコル スタックでポートが int16 になるためです。最大 65536 のポートを消費します。何十万もの外部同時リクエストにより、ポートプールが枯渇し、サーバーは応答を拒否することしかできません
概要
私の個人的な習慣は、Python プログラムをデプロイするために fastcgi プロトコルを使用することです。これはシンプルで問題がありません。技術的なソリューションを選択する場合は、最も単純で最も一般的なものを選択してください。このブログの fastcgi 実行スクリプトは次のとおりです
kill - `cat / tmp / django.pid` echo 'restart django....' python . / manage.py runfcgi - - settings = lutaf.settings_r maxchildren = maxspare = minspare = method = prefork pidfile = / tmp / django.pid host = 127.0 . 0.1 port = outlog = / tmp / dj.out errlog = / tmp / dj.error
皆さんも Gunicorn を試してみることをお勧めします。これが今後の開発の方向性です
以上がPython Webプログラムの9つの導入方法まとめの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。