
グローバルは問題
(手元のマシンではなく)
Web
サーバでコードを実行する
Flask
で
Web
アプリケーションを実行する際は、常にメモリにコードを置きます。
240
ページで登
場した次の
2
行を思い出してください。
if __name__ == '__main__':
app.run(debug=True)
この
if
文は、インタプリタがコードを直接実行しているか、(インタプリタや
PythonAnywhere
な
どによって)コードがインポートされているかを調べます。
Flask
を起動すると
Web
アプリケーショ
ンのコードが直接実行され、この
app.run
行が実行されます。しかし、
Web
サーバがコードを実行
するように設定されていると、コードはインポートされ、
app.run
行は実行されません。
なぜでしょうか?
Web
サーバは
Web
アプリケーションコードを適切と思われる方法で実行する
からです。そのため、
Web
サーバは
Web
アプリケーションのコードをインポートし、必要に応じて
関数を呼び出すために、常にメモリに
Web
アプリケーションのコードを置いたままにしています。
または、コードを実行していない間は必要なコードだけをロードして実行するという考え方に基づ
いて、必要に応じてコードをロードしたりアンロードしたりすることもあります。
Web
アプリケー
ションのステータスを変数に格納すると問題が生じるのは、この
2
番目の動作モードのとき(
Web
サーバが必要に応じてコードをロードする場合)です。例えば、
Web
アプリケーションに次の ...