66

setuptools のドキュメントには次のように記載されています。

最大限のパフォーマンスを得るには、Python パッケージを zip ファイルとしてインストールするのが最適です。ただし、すべてのパッケージが圧縮形式で実行できるわけではありません。これは、通常のオペレーティング システム ファイルとしてソース コードまたはデータ ファイルにアクセスできることを期待している場合があるためです。そのため、setuptools はプロジェクトを zip ファイルまたはディレクトリとしてインストールできます。デフォルトの選択は、プロジェクトの zip_safe フラグ (参照) によって決まります。

実際には、得られるパフォーマンス上の利点は何ですか? プロジェクトが zip セーフであるかどうか、または利点が一般的に最小限であるかどうかを調査する価値はありますか?

4

2 に答える 2

40

Zip ファイルはディスク上のスペースをあまり占有しないため、ディスクからの読み取りも高速になります。ほとんどのものは I/O バウンドであるため、パッケージを解凍する際のオーバーヘッドは、ディスクから大きなファイルを読み取る際のオーバーヘッドよりも少ない場合があります。さらに、単一の小さな zip ファイルがディスクに順次保存されている可能性が高く、小さなファイルのコレクションはより分散している可能性があります。回転メディアでは、これによりシーク数が削減されるため、読み取りパフォーマンスも向上します。そのため、一般的に、CPU 時間をいくらか犠牲にしてディスクの使用を最適化します。これによりimport、ロード時間が劇的に改善される可能性があります。

于 2013-05-14T10:46:08.200 に答える
18

前述のメリット以外にも、いくつかのメリットがあります。

1つの大きな .egg ファイルを読み取る (そして解凍する) 方が、ファイルが存在するストレージ メディア/ファイル システムによっては、複数の (場合によっては多数の) 小さな .py ファイルを読み込むよりも大幅に高速になる場合があります。

一部のファイルシステムには大きなブロック サイズ (1MB など) があり、小さなファイルを扱うとコストがかかる場合があります。ファイルが小さい (10KB など) 場合でも、実際には、読み取り時にディスクから 1MB のブロックをロードしている可能性があります。通常、ファイルシステムは複数の小さなファイルを大きなブロックに結合して、これを少し軽減します。

ファイル メタデータへのアクセスが遅いファイル システム (NFS などの共有ファイル システムで発生することがあります) では、大量のファイルにアクセスすると非常にコストがかかる場合もあります。

もちろん、束全体を圧縮することも役立ちます。これは、合計で読み取る必要があるデータが少なくなることを意味します。

簡単に言えば、ファイルシステムが少量の大きなファイルにより適しているかどうかは、非常に重要になる可能性があります。

于 2015-09-19T16:08:55.470 に答える