エラーを生成しているpathos multiprocessingを使用して書いているコードがあります。問題は、一連のオブジェクトに対して pathos.multiprocessing.pool を使用してプロセスを分散すると、クラス定義で初期化されたオブジェクトとは異なるオブジェクトで作業が行われるように見えることです。
class Training_Set:
def __init__( self, configurations ):
print("Train init",configurations)
self.configurations = configurations
self.forces = np.concatenate( [ c.reference_forces for c in configurations ] )
self.dipoles = np.concatenate( [ c.reference_dipoles for c in configurations ] )
self.stresses = np.concatenate( [ c.reference_stresses for c in configurations ] )
def run( self, config ):
print("Train: run config",config)
ran_okay = config.run( clean = True)
if not ran_okay:
return( False )
return( True )
def run_multi(self):
pool_size = mp.cpu_count()
pool = mp.Pool(processes=pool_size,maxtasksperchild=1,)
print("Train run_multi: configs",self.configurations)
pool_outputs = pool.map(self.run, self.configurations)
pool.close()
pool.join()
if "False" in pool_outputs:
return( False)
self.ran_okay = False
else:
return( True)
self.ran_okay = True
@property
def new_forces( self ):
print("Train: New forces config",self.configurations)
return np.concatenate( [ c.new_forces for c in self.configurations ] )
と で初期__init__
化された構成オブジェクトは同じです。したがって、これらの構成は への呼び出しで使用されるものです。run_multi()
new_forces
pool.map
pool_outputs = pool.map(self.run, self.configurations)
しかし、run
定義で参照されているオブジェクトは、メモリの別の部分を占有します。
これを引き起こしている可能性のあるアイデアをいただければ幸いです。
ありがとう!