2

ctypes.CDLL を活用する Python コードがいくつかあります。ドキュメントによると、これには gil は関係ありません。そうは言っても、プロファイリング時に不明なボトルネックがいくつか発生しています。time.sleep または ctypes.windll.kernel32.Sleep を使用していくつかの簡単なコードを実行すると、スレッドの数がタスクの数と一致するため、タイム スケールが等しく表示されます。つまり、タスクが 1 秒間スリープし、 1 つのスレッドで 1 つのタスクを送信するか、20 のスレッドで 20 のタスクを送信すると、どちらも完了までに約 1 秒かかります。

私のコードに戻ると、期待どおりにスケールアウトするのではなく、直線的にスケールアウトしています。プロファイリングは、_thread.lock で acquire() からの待機を示します。

これをさらに掘り下げて、問題がどこに現れているかを確認するためのテクニックは何ですか? ここでは ThreadPoolExecutor が最適な選択ではないでしょうか? 私はそれが基本的なスレッドプールを実装し、multiprocessing.pool の ThreadPool と変わらないことを理解しましたか?

4

0 に答える 0