3

私は疑問に思っていました-人々はdjangoビュー内で一般的に使用される多数のモジュールのインポートをどのように処理しますか?そして、これを効率的に行うための最良の方法は何ですか?

たとえば、次のようなビューがあります。

admin_views.py
search_views.py
.
.

そして私が見たものから、それらのすべてはHttpResponseまたは他のそのような一般的に使用されるモジュールを使用する必要があります。さらに、BeautifulSoupのようなものが必要なものもあれば、他のもの(md5、authなど)が必要なものもあります。

プロジェクトを開始したときに私がしたことは、私の一般的なインポートのほとんどを含むを作成し、ビュー自体include_all.pyにこれらの特定のものを追加することでした。だから、私は次のようなものを持っていました、

admin_views.py

from include_all import *
... 
[list of specific module imports for admin]
...

search_views.py

from include_all import *
... 
[list of specific module imports for search]
...

時間の経過とともに、include_allは必要なものがすべて含まれるその他のファイルになりました。その結果、多くのビューが不要なモジュールをインポートすることになります。

これは効率に影響しますか?つまり、python(django?)はすべてのモジュールを一度インポートし、それらを必要とする他のビューが再度インポートする必要がないように、それらを保存/キャッシュしますか?または、この長いファイルを呼び出す方法は非常に非効率的ですか?各ビューでこれらのモジュールを個別にインポートすることに固執する方がよいでしょうか?

この種のもののベストプラクティスもありますか?

ありがとう!

4

3 に答える 3

6

Python 自体は、モジュールが 1 回だけロードされることを保証します (reloadが明示的に呼び出されない限り、ここではそうではありません):importそのモジュールの 1 回目以降は、その名前を から直接バインドするだけsys.modules[themodulename]で、非常に高速な操作です。したがって、Django はそれ以上の最適化を行う必要はありません。

ベストプラクティスは、本番コードを回避from ... import *し(各名前の由来をより明確にし、より保守しやすくし、テストを容易にするなど)、モジュールを「個別に」必要な場所に正確にインポートすることです(おそらくバインドすることにより)数マイクロ秒を節約する可能性があり、間違いなく無駄にならない少数の名前ですが、「明示的は暗黙的よりも優れています」-明快さ、読みやすさ、保守性-はとにかく主な考慮事項です)。

于 2009-07-13T02:14:18.020 に答える
0

Django は CGI (または PHP) ではありません。アプリは、実行時間の長い単一 (または少数) の Python プロセスです。開始にどれだけ時間がかかるかは関係ありません。各 HTTP 要求は、(既に読み込まれている) ビュー関数を呼び出すだけです。

于 2009-07-13T03:01:43.090 に答える
0

頻繁に使用するインポートを __init__.py ファイルに平手打ちできると思います。

于 2009-07-13T02:14:45.227 に答える