値を取り、いくつかの計算を行い、さまざまな答えをオブジェクトとして返す関数を作成しました。ただし、pp を使用してコードを並列化しようとすると、次のエラーが発生します。
ファイル "trmm.py"、8 行目、getattr return self.header_array[name] で RuntimeError: Python オブジェクトの呼び出し中に最大再帰深度を超えました
これが私がやろうとしていることの簡単なバージョンです。
class DataObject(object):
"""
Class to handle data objects with several arrays.
"""
def __getattr__(self, name):
try:
return self.header_array[name]
except KeyError:
try:
return self.line[name]
except KeyError:
raise AttributeError("%s instance has no attribute '%s'" %(self.__class__.__name__, name))
def __setattr__(self, name, value):
if name in ('header_array', 'line'):
object.__setattr__(self, name, value)
elif name in self.line:
self.line[name] = value
else:
self.header_array[name] = value
class TrmmObject(DataObject):
def __init__(self):
DataObject.__init__(self)
self.header_array = {
'header': None
}
self.line = {
'longitude': None,
'latitude': None
}
if __name__ == '__main__':
import pp
ppservers = ()
job_server = pp.Server(2, ppservers=ppservers)
def get_monthly_values(value):
tplObj = TrmmObject()
tplObj.longitude = value
tplObj.latitude = value * 2
return tplObj
job1 = job_server.submit(get_monthly_values, (5,), (DataObject,TrmmObject,),("numpy",))
result = job1()
return tplObj を return [tplObj.longitude, tplObj.latitude] に変更しても問題ありません。ただし、前に述べたように、これは単純なバージョンであり、実際にはこの変更によりプログラムが非常に複雑になります。
どんな助けにもとても感謝しています。