3

futures バックポート パッケージを使用して、Python で ThreadPoolExecutor を使用しようとしています。ただし、問題は、すべてのスレッドが同時に実行されるため、実際のプーリングが行われないことです。より具体的には、5 つではなく、その関数の 10 スレッドを取得し、次に他のスレッドを取得します。私は次のコードを使用していますが、何か間違っていると思いますか、それとも単にバックポートされた実装ですか? ありがとうございました!

with ThreadPoolExecutor(max_workers=5) as executor:
    futures = [executor.submit(f, X, y) for t in range(10)]
    for future in as_completed(futures):
        self.trees.append(future.result())
4

1 に答える 1

0

ドキュメントでは、ワーカーごとに複数のスレッドを持つのが一般的であると述べています。

https://docs.python.org/3/library/concurrent.futures.html

バージョン 3.5 で変更: max_workers が None であるか指定されていない場合、ThreadPoolExecutor が CPU 作業の代わりに I/O をオーバーラップさせるために頻繁に使用され、ワー​​カーの数がProcessPoolExecutor のワーカー数よりも多くなる必要があります。

3.5+ 以外のバージョンを使用しているか、その他の内部最適化の理由により、デフォルトの乗数が 5 に設定されていない可能性があります。

于 2020-07-03T11:22:05.953 に答える