1

エラーを生成している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_forcespool.map

 pool_outputs = pool.map(self.run, self.configurations)

しかし、run定義で参照されているオブジェクトは、メモリの別の部分を占有します。

これを引き起こしている可能性のあるアイデアをいただければ幸いです。

ありがとう!

4

0 に答える 0