質問するログイン新規登録

質問編集履歴

4

2021/11/30 11:59

投稿

Luna_rab
Luna_rab

スコア17

title CHANGED
@@ -1,1 +1,1 @@
1
- [Python]並列処理でBrokenProcessPoolエラーが発生する
1
+ [Python]並列処理でプロセス数を増やすとエラーが発生する
body CHANGED
File without changes

3

題名の更新

2021/11/30 11:59

投稿

Luna_rab
Luna_rab

スコア17

title CHANGED
@@ -1,1 +1,1 @@
1
- [Python]ProcessPoolExecutorでBrokenProcessPoolが発生する
1
+ [Python]並列処理でBrokenProcessPoolエラーが発生する
body CHANGED
@@ -1,5 +1,5 @@
1
1
  # 状況
2
- 自作のモジュール内で並列処理を実装したいと考えています。
2
+ 自作のモジュール内で`coucurrent.futures.ProcessPoolExecutor`を用いて並列処理を実装したいと考えています。
3
3
  下記のコードで`MAX_WORKERS = 16`として実行したところ、`BrokenProcessPool`が発生しました。
4
4
 
5
5
  ```Python3

2

文法修正

2021/11/29 02:43

投稿

Luna_rab
Luna_rab

スコア17

title CHANGED
File without changes
body CHANGED
@@ -53,6 +53,7 @@
53
53
  コア: 8
54
54
  論理プロセッサ数: 16
55
55
  仮想化: 有効
56
+
56
57
  **OS**
57
58
  Windows10
58
59
 

1

初心者マークを外した。不要な情報を削除した。

2021/11/28 15:07

投稿

Luna_rab
Luna_rab

スコア17

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,6 @@
1
1
  # 状況
2
- 自作のモジュール内で並列処理を実装したいと考えています。
2
+ 自作のモジュール内で並列処理を実装したいと考えています。
3
- 下記のコードで`MAX_WORKERS = 16`として実行したところ、`ProcessPoolExecutor.map()`を使用すると`BrokenProcessPool`が発生しました。
3
+ 下記のコードで`MAX_WORKERS = 16`として実行したところ、`BrokenProcessPool`が発生しました。
4
4
 
5
5
  ```Python3
6
6
  from concurrent import futures
@@ -18,7 +18,7 @@
18
18
  `concurrent.futures.process.BrokenProcessPool: A process in the process pool was terminated abruptly while the future was running or pending.`
19
19
 
20
20
  # 試したこと
21
- 自分で原因を探ったところ、OSがプロセスをkillしている可能性があるとのことで、`MAX_WORKERS = 8`とした場合には`BrokenProcessPool`は発生しませんでした。
21
+ 自分で原因を探ったところ、OSがプロセスをkillしている可能性があるとのことで、プロセス数を減らせばエラーが発生しないと考え`MAX_WORKERS = 8`とした場合には`BrokenProcessPool`は発生しませんでした。
22
22
  また、公式のドキュメントを読んだところ、ProcessPoolExecutorの項で「If max_workers is None or not given, it will default to the number of processors on the machine.」とあったため`MAX_WORKERS = None`としたところ、`BrokenProcessPool`が発生しました。
23
23
 
24
24
  また、`concurrent.futures.ProcessPoolExecutor`で実装する前に`multiprocessing.Pool`で実装していたのですが、その際は`MAX_WORKERS = 16`としてもエラーは発生しませんでした。
@@ -39,6 +39,8 @@
39
39
  0. `MAX_WORKERS`の最適な数(エラーが発生せずに安全にタスクを完了できる数)の目安が知りたい。
40
40
  0. 安全に並列処理を実行できる実装が知りたい。現在は`MAX_WORKERS = 8`とすれば一応動くが、他のタスクの実行中や現在のマシンよりも性能の劣るマシン上での実行などで、使用できるリソースが少ない状況でもエラーを出さずに実行したい。
41
41
 
42
+ また、「使用しているCPUは8コア16スレッドなので、`MAX_WORKERS`を増加させると`MAX_WORKERS = 16`まではタスクが高速になる可能性がある。」という認識は正しいでしょうか。
43
+
42
44
  並列処理にはあまり詳しくないため、前提知識などが抜け落ちていた場合はご教示いただければ幸いです。
43
45
  よろしくおねがいします。
44
46
 
@@ -51,10 +53,6 @@
51
53
  コア: 8
52
54
  論理プロセッサ数: 16
53
55
  仮想化: 有効
54
- L1 キャッシュ: 512 KB
55
- L2 キャッシュ: 2.0 MB
56
- L3 キャッシュ: 16.0 MB
57
-
58
56
  **OS**
59
57
  Windows10
60
58