私は Experiment と呼ばれるクラスと Case と呼ばれる別のクラスを持っています。1 つの実験は、多くの個別のケースで構成されています。以下のクラス定義を参照してください。
from multiprocessing import Process
class Experiment (object):
def __init__(self, name):
self.name = name
self.cases = []
self.cases.append(Case('a'))
self.cases.append(Case('b'))
self.cases.append(Case('c'))
def sr_execute(self):
for c in self.cases:
c.setVars(6)
class Case(object):
def __init__(self, name):
self.name = name
def setVars(self, var):
self.var = var
私の実験クラスには、sr_execute という関数があります。この関数は、望ましい動作を示します。すべてのケースを解析して、ケースごとに属性を設定することに興味があります。次のコードを実行すると、
if __name__ == '__main__':
#multiprocessing.freeze_support()
e = Experiment('exp')
e.sr_execute()
for c in e.cases: print c.name, c.var
私は、
a 6
b 6
c 6
これは望ましい動作です。
ただし、マルチプロセッシングを使用してこれを並行して行いたいと考えています。これを行うには、実験クラスに mp_execute() 関数を追加します。
def mp_execute(self):
processes = []
for c in self.cases:
processes.append(Process(target= c.setVars, args = (6,)))
[p.start() for p in processes]
[p.join() for p in processes]
ただし、これは機能しません。以下を実行すると、
if __name__ == '__main__':
#multiprocessing.freeze_support()
e = Experiment('exp')
e.mp_execute()
for c in e.cases: print c.name, c.var
エラーが発生します。
AttributeError: 'Case' object has no attribute 'var'
どうやら、マルチプロセッシングを使用してクラス属性を設定できません。
何が起こっているかの手がかり、