私はプロセス間でデータを共有するためにpythonマネージャーを使用します。私は自分のコードを小さな断片に分割し、名前/オブジェクトの対の辞書を取り、与えられた名前でマネージャにオブジェクトを登録する関数 'soFactory'を作成しました。 以下の簡単な例では、2つのリストを作成し、マネージャーに登録します。 soFactoryを使用すると、マネージャは、参照する名前に関係なく、リストのうちの1つ(最後に登録されたもの)のみを返します。 soFactoryのロジックを解明すれば、登録された名前を参照して正しいオブジェクトにアクセスできます。 私はそれを見ていないが明白なものを見逃しているに違いありません。pythonマネージャーの問題の登録または私の間違ったコード
# ------------ prototype for SO question -------
from sys import stderr
def soFactory(dictofSo, manager):
"""shared object factory"""
for n,t in dictofSo.items():
print >>stderr, 'created item',n,t
manager.register(n, callable=lambda: t)
def soRoutine(n, t, manager):
manager.register(n, callable=lambda: t)
def test_soFactory(useFactory=True):
"""tests the soFactory function"""
from multiprocessing import managers
m = managers.BaseManager(address='/var/tmp/tqps-test', authkey='abc123')
mySOlist = {'L1': [1],'L2':[2]}
if useFactory:
soFactory(mySOlist, m)
else:
for n, t in mySOlist.items():
soRoutine(n, t, m)
m.start()
m.L1().append('only in L1!')
print >>stderr, m.L1(), m.L2()
>>> test_soFactory()
created item L2 [2]
created item L1 [1]
[1, 'only in L1!'] [1, 'only in L1!']
>>> test_soFactory(useFactory=False)
[1, 'only in L1!'] [2]
>>>
説明のためにありがとうが、直感的ではありませんが、意味があります。 –