したがって、タイトルにある 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
は、データの処理中に作業を行おうとすると、システムの遅延が大幅に軽減されることがわかったためです。