Python プログラムに大量のインポートがあり、起動が非常に遅い場合は、遅延インポートを試してください。この記事では、遅延インポートを実現する方法を共有します。 PEP0690[1] は、Python コンパイラ (-L) または標準ライブラリにこの機能を追加できるようにすることを提案していますが、現在の Python バージョンではまだ実装されていません。
ご存知のとおり、Python アプリケーションは、ユーザーの実際の操作を実行する前にインポート操作を実行します。モジュールが異なると、異なる場所から取得される可能性があり、実行に非常に時間がかかるモジュールもあれば、そうでないモジュールもある可能性があります。ユーザーが呼び出すものなので、多くのモジュールをインポートするのは純粋に時間の無駄です。
したがって、遅延インポートが必要です。遅延インポートを適用する場合、import foo を実行すると、名前 foo がグローバル完全名前空間 (globals()) に遅延参照として追加されるだけです。コンパイラーは実際のインポート操作を実行しません。 foo にアクセスするコードが見つかるまで実行されます。同様に、from foo import bar は名前空間に bar を追加し、bar を呼び出すコードに遭遇すると foo をインポートします。
実装するコードを書く
それでは、実装するコードをどのように書くのでしょうか?実際、それを実装するためのコードを記述する必要はありません。遅延インポート機能を実装するプロジェクト、つまり TensorFlow がすでに存在します。そのコードはサードパーティのライブラリに依存しません。それをここに置きます。将来遅延インポートが必要な場合は、LazyLoader[2] クラスを直接配置して、それを自分のプロジェクトにコピーするだけです。
ソース コードは次のとおりです。
# Code copied from https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/util/lazy_loader.py """A LazyLoader class.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function import importlib import types class LazyLoader(types.ModuleType): """Lazily import a module, mainly to avoid pulling in large dependencies. `contrib`, and `ffmpeg` are examples of modules that are large and not always needed, and this allows them to only be loaded when they are used. """ # The lint error here is incorrect. def __init__(self, local_name, parent_module_globals, name):# pylint: disable=super-on-old-class self._local_name = local_name self._parent_module_globals = parent_module_globals super(LazyLoader, self).__init__(name) def _load(self): # Import the target module and insert it into the parent's namespace module = importlib.import_module(self.__name__) self._parent_module_globals[self._local_name] = module # Update this object's dict so that if someone keeps a reference to the # LazyLoader, lookups are efficient (__getattr__ is only called on lookups # that fail). self.__dict__.update(module.__dict__) return module def __getattr__(self, item): module = self._load() return getattr(module, item) def __dir__(self): module = self._load() return dir(module)
コードの説明:
クラス LazyLoader は、types.ModuleType から継承し、初期化関数により、遅延モジュールは実際のモジュールのように動作します グローバル変数にも正しく追加されます モジュールが実際に使用されるとき、つまり __getattr__ または __dir__ が実行されるときのみ、実際のモジュールがインポートされ、グローバル変数は次のポイントに更新されます実際のモジュールとそのすべてのステータス (__dict__) 遅延ロードへの参照、モジュールのロードがアクセスされるたびにロード プロセスを経る必要がないように、実際のモジュールの状態に更新されます。
コードの使用法:
通常、モジュールは次のようにインポートします:
import tensorflow.contrib as contrib
対応する遅延インポートのバージョンは次のとおりです:
contrib = LazyLoader('contrib', globals(), 'tensorflow.contrib')
PEP0690 推奨されるアプローチ
PEP0690 の提案は、パフォーマンスを向上させるためにコンパイラー (C コード) レベルで実装することです。使用方法は 2 つあります。
One
1 つの方法は、Python スクリプトの実行時に -L パラメーターを追加することです。たとえば、次の内容を含む 2 つのファイル spam.py があります。
##import time time.sleep(10) print("spam loaded")egg.py の内容は次のとおりです。
import spam print("imports done")通常のインポート条件では、10 の後に最初に「spamloaded」が出力されます。 python -L Eggs.py を実行すると、スパム モジュールはインポートされず、アプリケーションのスパム モジュールはまったく使用されません。 Egg.py の内容が次の場合:
import spam print("imports done") spampython -L Egg.py を実行すると、最初に「importsned」が出力され、「spamloaded」が出力されます。 10 秒後に印刷されます)。
Second
もう 1 つの方法は、標準ライブラリの importlib メソッドを呼び出すことです。import importlib importlib.set_lazy_imports(True)一部のモジュールで遅延読み込みができない場合は、除外するには、次のようにすることもできます。
import importlib importlib.set_lazy_imports(True,excluding=["one.mod", "another"])次のようにすることもできます:
from importlib import eager_imports with eager_imports(): import foo import bar最後の言葉プロフェッショナルの後 実際の Python コマンド ライン プログラムでテストした後、遅延インポートを適用すると、起動時間が 70% 増加し、メモリ使用量が 40% 削減され、これは非常に印象的です。 参考文献[1]PEP0690: https://github.com/python/peps/blob/main/pep-0690.rst[2]LazyLoader : https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/util/lazy_loader.py
以上がPython の遅延インポート - 遅延インポートを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Pythonを1日2時間学ぶだけで十分ですか?それはあなたの目標と学習方法に依存します。 1)明確な学習計画を策定し、2)適切な学習リソースと方法を選択します。3)実践的な実践とレビューとレビューと統合を練習および統合し、統合すると、この期間中にPythonの基本的な知識と高度な機能を徐々に習得できます。

Web開発におけるPythonの主要なアプリケーションには、DjangoおよびFlaskフレームワークの使用、API開発、データ分析と視覚化、機械学習とAI、およびパフォーマンスの最適化が含まれます。 1。DjangoandFlask Framework:Djangoは、複雑な用途の迅速な発展に適しており、Flaskは小規模または高度にカスタマイズされたプロジェクトに適しています。 2。API開発:フラスコまたはdjangorestFrameworkを使用して、Restfulapiを構築します。 3。データ分析と視覚化:Pythonを使用してデータを処理し、Webインターフェイスを介して表示します。 4。機械学習とAI:Pythonは、インテリジェントWebアプリケーションを構築するために使用されます。 5。パフォーマンスの最適化:非同期プログラミング、キャッシュ、コードを通じて最適化

Pythonは開発効率でCよりも優れていますが、Cは実行パフォーマンスが高くなっています。 1。Pythonの簡潔な構文とリッチライブラリは、開発効率を向上させます。 2.Cのコンピレーションタイプの特性とハードウェア制御により、実行パフォーマンスが向上します。選択を行うときは、プロジェクトのニーズに基づいて開発速度と実行効率を比較検討する必要があります。

Pythonの実際のアプリケーションには、データ分析、Web開発、人工知能、自動化が含まれます。 1)データ分析では、PythonはPandasとMatplotlibを使用してデータを処理および視覚化します。 2)Web開発では、DjangoおよびFlask FrameworksがWebアプリケーションの作成を簡素化します。 3)人工知能の分野では、TensorflowとPytorchがモデルの構築と訓練に使用されます。 4)自動化に関しては、ファイルのコピーなどのタスクにPythonスクリプトを使用できます。

Pythonは、データサイエンス、Web開発、自動化スクリプトフィールドで広く使用されています。 1)データサイエンスでは、PythonはNumpyやPandasなどのライブラリを介してデータ処理と分析を簡素化します。 2)Web開発では、DjangoおよびFlask Frameworksにより、開発者はアプリケーションを迅速に構築できます。 3)自動化されたスクリプトでは、Pythonのシンプルさと標準ライブラリが理想的になります。

Pythonの柔軟性は、マルチパラダイムサポートと動的タイプシステムに反映されていますが、使いやすさはシンプルな構文とリッチ標準ライブラリに由来しています。 1。柔軟性:オブジェクト指向、機能的および手続き的プログラミングをサポートし、動的タイプシステムは開発効率を向上させます。 2。使いやすさ:文法は自然言語に近く、標準的なライブラリは幅広い機能をカバーし、開発プロセスを簡素化します。

Pythonは、初心者から上級開発者までのすべてのニーズに適した、そのシンプルさとパワーに非常に好まれています。その汎用性は、次のことに反映されています。1)学習と使用が簡単、シンプルな構文。 2)Numpy、Pandasなどの豊富なライブラリとフレームワーク。 3)さまざまなオペレーティングシステムで実行できるクロスプラットフォームサポート。 4)作業効率を向上させるためのスクリプトおよび自動化タスクに適しています。

はい、1日2時間でPythonを学びます。 1.合理的な学習計画を作成します。2。適切な学習リソースを選択します。3。実践を通じて学んだ知識を統合します。これらの手順は、短時間でPythonをマスターするのに役立ちます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

メモ帳++7.3.1
使いやすく無料のコードエディター
