5

Python Web アプリ (Flask/uWSGI) を開発してローカル コンピューターで実行すると*.pyc、インタープリターによってファイルが生成されます。私の理解では、これらのコンパイル済みファイルは読み込みを高速化できますが、必ずしも実行が高速になるわけではありません。

この同じアプリを本番環境にデプロイすると、ローカル ファイル システムへの書き込み権限を持たないユーザー アカウントで実行されます。ソース管理にコミットされたファイルはなく*.pyc、デプロイ中にそれらを生成する努力もありません。Python が.pyc実行時にファイルを書きたいとしても、それはできません。

最近、これがアプリのパフォーマンスに具体的な影響を与えるかどうか疑問に思い始めました。プロセスが開始された後の最初のページビューに関して、またはそのライフタイム全体で一貫して.

python -m compileallデプロイ スクリプトの一部としてを投入する必要がありますか?

4

1 に答える 1

5

.pyc確かに、何も害を及ぼさないので、先に進んで にプリコンパイルできます。

最初または n 回目のページロードに影響しますか? Flask/WSGI が永続的なプロセスとして実行されると仮定すると、まったくそうではありません。最初のページが要求されるまでに、すべての Python モジュールは既に (バイトコードとして) メモリにロードされています。したがって、サーバーの起動時間は、ファイルを事前にコンパイルしないことによって影響を受ける唯一のものです。

ただし、何らかの理由でページ要求ごとに新しい Python プロセスが呼び出される場合は、(おそらく) パフォーマンスに顕著な違いがあり、事前にコンパイルした方がよいでしょう。

Klaus が上記のコメントで述べたように、ページロードが影響を受ける可能性があるのは、関数がまだインポートされていないモジュールをたまたまインポートしようとした場合のみです。これには、続行する前に、モジュールを解析してバイトコードに変換し、メモリにロードする必要があります。

于 2016-02-25T05:41:25.443 に答える