1
getattrでオブジェクトの構成を実装し、オブジェクトを新しいプロセスに渡すと、getattrからRecursionErrorが返されます。次に例を示します。pythonオブジェクトの構成とマルチプロセッシング
from multiprocessing import Pool
class Bar:
def __init__(self, bar):
self.bar = bar
class Foo:
def __init__(self, bar):
self._bar = bar
def __getattr__(self, attr):
try:
return getattr(self._bar, attr)
except RecursionError:
print('RecursionError while trying to access {}'.format(attr))
raise AttributeError
def f(foo):
print(foo.bar)
if __name__ == '__main__':
foo = Foo(Bar('baz'))
f(foo)
p = Pool(1)
p.map(f, [foo])
出力はこれです:
baz
RecursionError while trying to access _bar
baz
なぜfooが_bar属性を見つけ、GETATTRに頼らなければならないのですか?
これはなんですか? 'foo = Foo(Bar( 'baz'))'?それはあなたの意見で何をしますか? –