次の単純化された例は、という例外で失敗します
AttributeError: type object 'SyncManager' has no attribute 'from_address'
コード例:
import multiprocessing as mp
class Inserter:
def __init__(self):
self.cache = {}
self.manager = mp.Manager()
self.lock = self.manager.Lock()
def __call__(self, filename):
with self.lock:
print filename
if __name__ == "__main__":
files = [
{'a':1, 'b':2},
{'b':1, 'c':2},
{'d':1, 'e':2},
{'b':1, 'd':2},
]
inserter = Inserter()
pool = mp.Pool(processes=None)
pool.imap_unordered(inserter, files)
pool.close()
pool.join()
どうすればマネージャとロックのセマンティクスを Inserter クラス内にカプセル化できるのでしょうか (つまり、ロック オブジェクトを呼び出し可能な関数に明示的に渡す必要はありません)。