質問編集履歴

5

タイトルの変更

2021/09/02 14:36

投稿

_toy
_toy

スコア28

test CHANGED
@@ -1 +1 @@
1
- pythonでmultiprocessingのpoolを例文通りに書いてもエラーが出る
1
+ pythonでmultiprocessingのpoolでNameError: name '' is not definedのエラーが出る
test CHANGED
File without changes

4

簡易ソースコードを追加

2021/09/02 14:36

投稿

_toy
_toy

スコア28

test CHANGED
File without changes
test CHANGED
@@ -215,3 +215,129 @@
215
215
 
216
216
 
217
217
  例文と同じコードを使用してうまくいかない場合、どこを確認すればいいのかわかりません。
218
+
219
+
220
+
221
+ 追記
222
+
223
+ 最初のソースコードだとわかりづらいかなと思ったので同じような簡易版のソースコードを作成しました。
224
+
225
+ ```ここに言語を入力
226
+
227
+ import time
228
+
229
+ from multiprocessing import Pool
230
+
231
+
232
+
233
+
234
+
235
+ class Main():
236
+
237
+
238
+
239
+ def main(self):
240
+
241
+ # Pool()を定義
242
+
243
+ p = Pool()
244
+
245
+
246
+
247
+ # プロセスを2つ非同期で実行
248
+
249
+ a = 3
250
+
251
+ b = 5
252
+
253
+
254
+
255
+ result = p.apply_async(nijou, args=(None, a))
256
+
257
+ result2 = p.apply_async(nijou, args=(None, b))
258
+
259
+
260
+
261
+
262
+
263
+ # 1秒間隔で終了チェックして終了したら結果を表示
264
+
265
+ for k in range(5):
266
+
267
+ if result.ready():
268
+
269
+ break
270
+
271
+ print(result.get())
272
+
273
+ print(result2.get())
274
+
275
+
276
+
277
+
278
+
279
+
280
+
281
+
282
+
283
+ def nijou(self,inputs):
284
+
285
+ x = inputs
286
+
287
+ print('input: %d' % x)
288
+
289
+ time.sleep(8)
290
+
291
+ retValue = x * x
292
+
293
+ print('double: %d' % retValue)
294
+
295
+ return(retValue)
296
+
297
+
298
+
299
+ class MainStart():
300
+
301
+ def __init__(self):
302
+
303
+ Main.main(None)
304
+
305
+
306
+
307
+
308
+
309
+ if __name__ == "__main__":
310
+
311
+
312
+
313
+ app = MainStart()
314
+
315
+ ```
316
+
317
+ これを実行した際のエラー文が以下になります。
318
+
319
+ ```ここに言語を入力
320
+
321
+ Traceback (most recent call last):
322
+
323
+ File "Test.py", line 44, in <module>
324
+
325
+ app = MainStart()
326
+
327
+ File "Test.py", line 39, in __init__
328
+
329
+ Main.main(None)
330
+
331
+ File "Test.py", line 15, in main
332
+
333
+ result = p.apply_async(nijou, args=(None, a))
334
+
335
+ NameError: name 'nijou' is not defined
336
+
337
+ ```
338
+
339
+
340
+
341
+ こちらでも定義してあるはずのnijouがないよと言われます。
342
+
343
+ かなり短いソースコードに絞れたのでこの中に原因があるのかなと思っています。

3

タイトル変更と追記

2021/09/02 14:28

投稿

_toy
_toy

スコア28

test CHANGED
@@ -1 +1 @@
1
- pythonでmultiprocessingのpoolを使う際定義した関数をうまく拾えな
1
+ pythonでmultiprocessingのpoolを例文通りてもエラーが出る
test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- その時のコードはいかになります。
13
+ その時のコードは以下になります。
14
14
 
15
15
 
16
16
 
@@ -133,3 +133,85 @@
133
133
  関数のPlayer_MCTSを通らない結果出力されるはずのplayerMCTSが定義されず、
134
134
 
135
135
  エラーが出ているのかなと思います。
136
+
137
+
138
+
139
+ 追記
140
+
141
+ このコードは例文を参考に実装しました。
142
+
143
+ 例文のソースコードは以下のようになります。
144
+
145
+ ```ここに言語を入力
146
+
147
+ from multiprocessing import Pool
148
+
149
+ import os
150
+
151
+ import time
152
+
153
+ import random
154
+
155
+
156
+
157
+
158
+
159
+ def long_time_task(self,name):
160
+
161
+ print('Run task {} ({})...'.format(name, os.getpid()))
162
+
163
+ start = time.time()
164
+
165
+ time.sleep(3)
166
+
167
+ end = time.time()
168
+
169
+ print('Task {} runs {} seconds.'.format(name, (end - start)))
170
+
171
+
172
+
173
+
174
+
175
+ def main(self):
176
+
177
+ print('Parent process {}.'.format(os.getpid()))
178
+
179
+ p = Pool(8) # 同時に最大4個の子プロセス
180
+
181
+ for i in range(8):
182
+
183
+ p.apply_async(long_time_task, args=(None,i+1,))
184
+
185
+ # 非同期処理のため、親プロセスは子プロセスの処理を待たずに、
186
+
187
+ # 次のprintをする
188
+
189
+ print('Waiting for all subprocesses done...')
190
+
191
+ p.close()
192
+
193
+ p.join()
194
+
195
+
196
+
197
+
198
+
199
+ print('All subprocesses done.')
200
+
201
+
202
+
203
+ if __name__ == '__main__':
204
+
205
+ main(None)
206
+
207
+ ```
208
+
209
+ このソースコードはうまく実行できます。
210
+
211
+
212
+
213
+ 問題のソースコードのエラー文を見るにplayerMCTSは関数の名前ではなく、引数の名前として探しているから見つからないのでしょうか?
214
+
215
+
216
+
217
+ 例文と同じコードを使用してうまくいかない場合、どこを確認すればいいのかわかりません。

2

スクリプトにコメントを追加

2021/09/02 12:07

投稿

_toy
_toy

スコア28

test CHANGED
File without changes
test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
  ```Reversi.py
20
20
 
21
-
21
+   #どこに石を置くかを決定する
22
22
 
23
23
    def put_stone(self):
24
24
 
@@ -56,7 +56,7 @@
56
56
 
57
57
 
58
58
 
59
-
59
+   #モンテカルロ木探索で手を決定する
60
60
 
61
61
    def Player_MCTS(self, times):
62
62
 

1

スクリプトに不備がありました

2021/09/02 08:07

投稿

_toy
_toy

スコア28

test CHANGED
File without changes
test CHANGED
@@ -62,7 +62,7 @@
62
62
 
63
63
 
64
64
 
65
- global playerMCTS
65
+ global playerMCTS
66
66
 
67
67
  print('Run task {}'.format(times))
68
68