3

私は Python を使用して、非常に時間がかかる (多くの再帰を含む) コードを作成しました。私はコードのランタイムをテストしていましたが、コードがどれほど複雑になっても、Python が CPU の計算能力を完全に消費することは決してないことに気付きました。Intel Dual Core を搭載した Windows7 で Python を実行していますが、Python は複数の CPU を使用することはありません。基本的に、1 つの CPU が実行され、もう 1 つの CPU がアイドル状態になります。

誰かがバックグラウンドで何が起こっているかを少し説明できますか? 前もって感謝します!

4

3 に答える 3

6

スクリプトは単一のプロセスで実行されるため、単一のプロセッサで実行されます。Windows スケジューラは、おそらく、あるコアから別のコアにかなり頻繁に移動しますが、一度に複数の場所で単一のプロセスを実行することはできません。

CPU の処理能力をもっと活用したい場合は、複数のプロセスでコードの複数のインスタンスを実行できるように、ワークロードを分割する方法を理解する必要があります。

于 2012-08-03T20:02:44.413 に答える
3

実際、マルチスレッドの Python アプリケーションは、CPU の 1 つ以上のコアを使用するには十分ではありません。Python は、"Global Interpreter Lock" (GIL) と呼ばれる構造を使用します。Python のインスタンス内のすべてのコードは、このロックを取得する必要があります。つまり、Python アプリケーション内では、複数のプロセッサがあり、マルチスレッドであっても、特定の時点で 1 つのコード スレッドのみが実行されます。

つまり、 multiprocessing モジュールを使用すると、複数のコアを使用できます。

import multiprocessing

def run():
    x = 1+1
    save(x)

if __name__=="__main__":
    for i in range(100):
        p = multiprocessing.Process(target=run)
        p.start()
于 2012-08-03T21:23:45.637 に答える
2

Python アプリケーションがマルチスレッド化されていない場合、CPU の複数のコアを使用して実行することはありません。

于 2012-08-03T20:01:59.303 に答える