0

コードの実装中に、時間を短縮する特定の機能のみをインポートする必要があるという提案を受けましたが、異なる結果が得られました。私は何か間違ったことをしていますか?

python -m timeit "from subprocess import call" (suggested method which is taking more time)
1000000 loops, best of 3: 1.01 usec per loop

python -m timeit "import subprocess"
1000000 loops, best of 3: 0.525 usec per loop
4

4 に答える 4

1

まず、深刻なテストには 2 回以上の実行が必要です。しかし、私はあなたが同様の結果でもっと多くのことを実行したと思います.

改善されるのはimportの時間ではなく、一般的な実行時間です。具体的には、インタープリターがあらゆる種類のシンボルを解決するのにかかる時間です。

本番環境にある最大のモジュールを使用し、すべての一般的なインポートを特定のものに置き換えて、この時間を測定することをお勧めします。

特定のインポートを好むもう 1 つの理由は、文書化です。つまり、プログラムが何を実行し、インポートによってどのように実行するかを理解することです。インポートが具体的である場合、この情報もより具体的になります。

于 2013-08-27T06:18:18.990 に答える
1

モジュールから特定の関数をインポートする理由は、関数内に管理しやすい名前空間を持つことであり、速度は重要ではありません。Joachim Pileborg がコメントで示唆しているように、使用した関数の実際の実行のfrom ... import方が高速である可能性がありますが、それでも大多数のスクリプトの違いに気付かない場合があります。

最善の方法は、コードが最も読みやすく保守しやすい方法でモジュールをインポートし (たとえば、コード内で表示するcall()subprocess.call()、コード内で表示するか?)、パフォーマンスに焦点を当てるのは、コードのごく一部が使用されている特定のインスタンスのみです。コードがボトルネックであるか、コードが全体的に遅すぎます。

于 2013-08-27T06:21:38.840 に答える
1

インポートされるモジュールを使用するコードがないため、この種のプロファイリングは役に立ちません。

subprocess モジュールを実際に使用するコードを含めます。2 種類のインポートの違いがわずかな結果であることに気付くかもしれません。

于 2013-08-27T06:23:19.580 に答える