2

したがって、タイトルにある 2 つの方法の違いはわかりますが、実際的な意味はわかりません。

私が理解していることから、実際に利用可能なコアよりも多くの NUM_WORKERS を使用すると、OS が物事を並行して維持しようとして絶えず切り替えられるため、パフォーマンスが大幅に低下します。これがどれほど真実かはわかりませんが、私はどこかで私より賢い人からそれを読んだ.

そしてそれのためのドキュメントにos.cpu_count()は次のように書かれています:

システム内の CPU の数を返します。不明な場合は None を返します。この数は、現在のプロセスが使用できる CPU の数とは異なります。使用可能なCPU数はlen(os.sched_getaffinity(0))で取得できます

そのため、「システム」にあるよりも多くの CPU をプロセスで使用できる場合、「システム」が何を指すかを理解しようとしています。

安全かつ効率的に機能を実装したいだけですmultiprocessing.pool。だからここに私の質問が要約されています:

次の実際的な意味は何ですか。

NUM_WORKERS = os.cpu_count() - 1
# vs.
NUM_WORKERS = len(os.sched_getaffinity(0)) - 1

これ-1は、データの処理中に作業を行おうとすると、システムの遅延が大幅に軽減されることがわかったためです。

4

3 に答える 3