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

回答編集履歴

4

修正

2021/09/01 15:39

投稿

退会済みユーザー
answer CHANGED
@@ -34,7 +34,7 @@
34
34
 
35
35
   このように、呼び出される側(引数を受け取る側)は受け取り口を2つ用意しているのに、呼び出し側は1つしか引数を与えていません。
36
36
 
37
- これは一般的には**TypeErrorという例外**を発生させる事象となります。
37
+ これは引数の数が不致のため**TypeErrorという例外**を発生させる事象となります。
38
38
 
39
39
 
40
40
  2.multiprocessingの子プロセスの実行時例外
@@ -138,7 +138,7 @@
138
138
  逆に1.冒頭の後半のパターンで無理やり例外を生じさせないようにするなら、下記のようなコードになるでしょう。
139
139
 
140
140
  ```diff
141
- def long_time_task(foo, name): # selfの代わりにfooを使っている。selfでも同じ
141
+ def long_time_task(self, name): # selfの代わりにfooなど別の名前を使っても同じ
142
142
  print('Run task {} ({})...'.format(name, os.getpid()))
143
143
  start = time.time()
144
144
  time.sleep(3)
@@ -165,11 +165,11 @@
165
165
 
166
166
  ```
167
167
 
168
- 変えたのは、緑色で強調したように
168
+ 変えたのは、
169
169
 
170
170
  ```diff
171
171
  + res = p.apply_async(long_time_task, args=(None,i+1))
172
172
  ```
173
173
  の部分です。
174
174
 
175
- 受け取り側がfoo, name の2つなのですから、呼び出し側を1つの要素から2つの要素をもったタブルに変え、さらにnameは2番目なので、**2番目のパラメータに適切にi+1を渡す**ようにしています。
175
+ 受け取り側が`self, name` の2つなのですから、呼び出し側を1つの要素から2つの要素をもったタブルに変え、さらに`name`は2番目なので、**2番目のパラメータに`i+1`を渡す**ようにします。

3

2021/09/01 15:39

投稿

退会済みユーザー
answer CHANGED
@@ -80,7 +80,7 @@
80
80
  全部子プロセスが終了した後、resultsの中の結果のget()を呼び出しています。
81
81
 
82
82
   通常、このget()は、それぞれの子プロセスが走らせた関数の結果を返すために使うものですが、
83
- 子プロセス実行中に例外が発生していた場合は、get()の段階でその例外が送出され、親プロセスも止まりmす。
83
+ 子プロセス実行中に例外が発生していた場合は、get()の段階でその例外が送出され、親プロセスも止まりす。
84
84
 
85
85
 
86
86
  上記後段のコードにあてはめると、

2

2021/09/01 12:54

投稿

退会済みユーザー
answer CHANGED
@@ -48,7 +48,7 @@
48
48
 
49
49
 
50
50
  3.例外を捕捉するには
51
- では、子の中でどんな例外がおきたか、どうやって補足すればいいのでしょうか。
51
+ では、子の中でどんな例外がおきたか、どうやって捕捉すればいいのでしょうか。
52
52
 
53
53
  Pool.apply_async() が返す結果のクラスである、[`AsyncResult`](https://docs.python.org/ja/3/library/multiprocessing.html#multiprocessing.pool.AsyncResult)に[get()](https://docs.python.org/ja/3/library/multiprocessing.html#multiprocessing.pool.AsyncResult.get)という関数があり、これを利用**することができます**。
54
54
 

1

修正

2021/09/01 12:53

投稿

退会済みユーザー
answer CHANGED
@@ -14,7 +14,7 @@
14
14
  ...
15
15
  ...
16
16
  > ```
17
- とすると、なぜスルーされるのか
17
+ とすると、なぜスルーされるのか
18
18
   
19
19
 
20
20
  回答:
@@ -122,11 +122,11 @@
122
122
  > また関数にselfを使う際にはどうすればスルーされずに実行できるのか教えてください。
123
123
 
124
124
  selfを使う、というのは、多分クラスのところでご覧になったのだと思いますが、今回の件は、クラスで使うselfとは**無関係**です。
125
- 単純に「1つしか書いてはいないパラメータを2つにしてしまった」ことが原因で発生した事象に過ぎません。
125
+ 単純に「1つ書くべきパラメータを2つにしてしまった」ことが原因で発生した事象に過ぎません。
126
126
  selfではなく、例えば別の名前の変数を使っても、数が多すぎたり少なすぎたりするだけで、同じような事象になります。
127
127
 
128
128
  ```
129
- def long_time_task(foo, name): # 別の名前、数が多い
129
+ def long_time_task(foo, name): # selfではない別の名前、数が多い(2個)
130
130
 
131
131
  def long_time_task(baz, yoo, name): # 数がさらに多い(3個)
132
132
 
@@ -135,8 +135,7 @@
135
135
  ```
136
136
   
137
137
   
138
- 逆に後半のパターンで無理やり例外を生じさせないようにするなら、受け口を増やせばいいので
138
+ 逆に1.冒頭の後半のパターンで無理やり例外を生じさせないようにするなら、下記ようなコードになるしょう。
139
- 下記のようなコードになるでしょう。
140
139
 
141
140
  ```diff
142
141
  def long_time_task(foo, name): # selfの代わりにfooを使っている。selfでも同じ
@@ -167,10 +166,10 @@
167
166
  ```
168
167
 
169
168
  変えたのは、緑色で強調したように
170
- ``diff
171
169
 
170
+ ```diff
172
171
  + res = p.apply_async(long_time_task, args=(None,i+1))
173
172
  ```
174
173
  の部分です。
175
174
 
176
- 受け取り側がfoo, name の2つなのですから、呼び出し側を1つの要素から2つの要素をもったタブルに変え、さらにnameは2番目なので2番目に適切にi+1を渡すようにしています。
175
+ 受け取り側がfoo, name の2つなのですから、呼び出し側を1つの要素から2つの要素をもったタブルに変え、さらにnameは2番目なので、**2番目のパラメータに適切にi+1を渡す**ようにしています。