3

私は実際にはPython Web開発に不慣れです。Web 開発に関する以前の知識は、PHP から得ました。

PHP では、2 つの異なる HTTP リクエスト間で保持されるリソース (変数など) はありません ($_SESSION私の推測を除いて)。

Flaskが によって実行される場合gunicorn、2 つの異なる HTTP リクエスト間でどのリソースが保持されるのでしょうか?

この質問はの文書から来ましたFlask。ドキュメントでは、データベース セッション クローズ コードを に登録する必要があると書かれていますapp.teardown_request。私自身のテストでは、セッション終了コードを登録しなかった場合、データベースは多くのアイドル状態の接続を取得します。

4

1 に答える 1

0

実際には、Web リクエストを処理するモードは 2 つだけです。

  1. リクエストごとにアプリケーション全体をスピンアップし、リクエストごとに破棄します。永続化されていないもの (他のプロセス、ディスク、またはクライアント) はすべて、要求の最後に破棄されます。
  2. アプリケーションをスピンアップし、破棄される前に複数のリクエストを処理できるようにします。リクエストに固有ではないほとんどすべてのものは、リクエスト間で保持されます。

モード 1 では、リクエストごとに行う作業が増えますが、アプリケーションが使用するすべてのリソースが破棄されることが保証されます (データベース接続を閉じるのを忘れても、データベース接続がリークする問題は発生しません)。

モード#2では、リクエストごとに行う作業が少なくなりますが、明示的に閉じないとデータベース接続がリークする例のように、アプリケーションがリソースを「リーク」する可能性があります。

PHP (Apache の埋め込みモードで実行mod_php) は最初のモードを使用します。Flask (および最近の Web 開発で一般的に使用されている大部分の言語のフレームワーク) は、2 番目を使用します。

于 2012-11-17T03:49:36.450 に答える