質問編集履歴

3

追記

2021/02/19 17:13

投稿

Flan.
Flan.

スコア123

test CHANGED
File without changes
test CHANGED
@@ -187,3 +187,53 @@
187
187
  print("close")
188
188
 
189
189
  ```
190
+
191
+ ```ここに言語を入力
192
+
193
+ flan_ok
194
+
195
+ Traceback (most recent call last):
196
+
197
+ File "testtorch.py", line 28, in <module>
198
+
199
+ p.start()
200
+
201
+ File "C:\Users\PC_User\Anaconda3\envs\testpyflan\lib\multiprocessing\process.py", line 112, in start
202
+
203
+ self._popen = self._Popen(self)
204
+
205
+ File "C:\Users\PC_User\Anaconda3\envs\testpyflan\lib\multiprocessing\context.py", line 223, in _Popen
206
+
207
+ return _default_context.get_context().Process._Popen(process_obj)
208
+
209
+ File "C:\Users\PC_User\Anaconda3\envs\testpyflan\lib\multiprocessing\context.py", line 322, in _Popen
210
+
211
+ return Popen(process_obj)
212
+
213
+ File "C:\Users\PC_User\Anaconda3\envs\testpyflan\lib\multiprocessing\popen_spawn_win32.py", line 89, in __init__
214
+
215
+ reduction.dump(process_obj, to_child)
216
+
217
+ File "C:\Users\PC_User\Anaconda3\envs\testpyflan\lib\multiprocessing\reduction.py", line 60, in dump
218
+
219
+ ForkingPickler(file, protocol).dump(obj)
220
+
221
+ _pickle.PicklingError: Can't pickle <class '__main__.flan'>: it's not the same object as __main__.flan
222
+
223
+ Traceback (most recent call last):
224
+
225
+ File "<string>", line 1, in <module>
226
+
227
+ File "C:\Users\PC_User\Anaconda3\envs\testpyflan\lib\multiprocessing\spawn.py", line 99, in spawn_main
228
+
229
+ new_handle = reduction.steal_handle(parent_pid, pipe_handle)
230
+
231
+ File "C:\Users\PC_User\Anaconda3\envs\testpyflan\lib\multiprocessing\reduction.py", line 87, in steal_handle
232
+
233
+ _winapi.DUPLICATE_SAME_ACCESS | _winapi.DUPLICATE_CLOSE_SOURCE)
234
+
235
+ PermissionError: [WinError 5] アクセスが拒否されました。
236
+
237
+
238
+
239
+ ```

2

追記

2021/02/19 17:13

投稿

Flan.
Flan.

スコア123

test CHANGED
File without changes
test CHANGED
@@ -107,3 +107,83 @@
107
107
  close
108
108
 
109
109
  ```
110
+
111
+
112
+
113
+ 追記
114
+
115
+ .share_memory()したあとargeにいれると症状が変わりましたが
116
+
117
+ 動きません Queueという物も見つけましたがなんなのか全くわかりません
118
+
119
+
120
+
121
+ 複数のProcessで 同じインスタンスの関数 変数を使いたいです 変数はちょくちょくProcessのほうから変更します
122
+
123
+ Queueのほうがいろいろできると書いてありましたがどっちがいいのでしょうか?
124
+
125
+ ```ここに言語を入力
126
+
127
+ import torch
128
+
129
+ import torch.nn as nn
130
+
131
+ import torch.optim as optim
132
+
133
+ import torch.nn.functional as F
134
+
135
+ import torchvision.transforms as T
136
+
137
+ #import torch.multiprocessing as mp
138
+
139
+ import torch.multiprocessing as mp
140
+
141
+
142
+
143
+ class flan(nn.Module):
144
+
145
+ def __init__(self):
146
+
147
+ super(flan, self).__init__()
148
+
149
+ self.flan=True
150
+
151
+ print("flan_ok")
152
+
153
+ def prints(self):
154
+
155
+ print("def_ok")
156
+
157
+
158
+
159
+
160
+
161
+ def train(flan):
162
+
163
+ print("car")
164
+
165
+ flan.prints()
166
+
167
+ print(flan.flan,"flan_ok")
168
+
169
+ flan.flan=495
170
+
171
+ print(flan.flan,"add_ok")
172
+
173
+ if __name__ == '__main__':
174
+
175
+ flan=flan()
176
+
177
+ flan.share_memory()
178
+
179
+ p = mp.Process(target=train, args=(flan,))
180
+
181
+ p.start()
182
+
183
+ print("start")
184
+
185
+ p.join()
186
+
187
+ print("close")
188
+
189
+ ```

1

誤字

2021/02/19 08:38

投稿

Flan.
Flan.

スコア123

test CHANGED
@@ -1 +1 @@
1
- python マルチプロセスでclassを共有できない
1
+ python マルチプロセスでインスタンスを共有できない
test CHANGED
@@ -1,4 +1,4 @@
1
- pythonのマルチプロセスで classを共有したいです
1
+ pythonのマルチプロセスで インスタンスを共有したいです
2
2
 
3
3
  乗せてるコードはtest用なので一つしか.Processを作っていませんが
4
4
 
@@ -8,7 +8,7 @@
8
8
 
9
9
  ためしたこと 
10
10
 
11
- args=()にclassを入れてみる
11
+ args=()にインスタンスを入れてみる
12
12
 
13
13
 
14
14