非常に簡単な方法の 1 つは CGI です (通常の Web サーバーと組み合わせて を使用しますwsgiref.handlers.CGIHandler
)。本番サーバーでのパフォーマンスはひどいですが、開発には最適です。mod_wsgi WSGIScriptAlias (application
オブジェクトを公開する) と mod_cgi ScriptAlias ( when を呼び出す)wsgiref
の両方として機能する単一のスクリプトを作成できます__name__=='__main__'
。
多くの WSGI 環境には、WSGIScriptReloading
デフォルトでオンになっている mod_wsgi の など、基本的なスクリプトをリロードする方法があります。残念ながら、コードの多くをモジュールに入れる可能性が高く、再読み込みが容易ではありません。mod_wsgi では、デーモン モードのときに SIGINT を送信してリロードを実行することによっても実行できます。残念ながら、リロードする必要があるかどうかを知るために、mtime の更新に使用しているすべてのモジュールをスニッフィングする必要があります。また、組み込みモードでは機能しません。
面倒ですが実行可能なアプローチは、アプリケーションの一部であるすべてのモジュールをスニッフィングし、最後のチェック以降に更新されたモジュールがある場合は、それらをすべてリロードすることです。それらが古いものへの相互参照を保持しないようにするために、ルックアップからそれらをすべて削除することによって、それらを一度にリロードする必要がありますsys.modules
(相対的なインポートルックアップの問題を回避するために、そこにいる間に - 値のエントリも削除します)。None
自分自身のバージョン。そしてもちろん、アプリケーションの外部に自分自身への他の参照を残してはなりません。この例は、こちらModuleUpdater
のクラスで実際に見ることができます。
(このソフトウェアはリリースの準備ができていませんが、数年前から私の WSGI アプリにモジュールのリロードを提供しており、安定しているようです。アイデアは、すべての WSGI アプリをパッケージ内のアプリケーション クラスに入れることです。単一の WSGI/CGI/コマンドライン エントリ ポイント スクリプトからインポートします。そのスクリプトに配置構成を含めます。)