2017-11-05 6 views
0

私は1つのdictプロキシを持つマネージャを持っています。私は別のプロセスからアクセスしたい。簡潔にするために、サンプルコードは1つのプロセスしか使用しませんが、(他のプロセスが最初のプロセスから作成されたかのように)直接参照していないと仮定します。 dict proxy dict1をtypeName 'd1'の下に登録するので、リモートからアクセスできます。私はマネージャーのレジストリをチェックし、そこにディクテーションプロキシを見ます。 しかし、私はd1を呼び出すことによってそれにアクセスしようとすると、私は、リモートからKeyErrorを取得します。私は自分のdictにアクセスするためのメソッドを作成することができますが、ドキュメントにしたがってdictプロキシに直接アクセスする方法がなければなりません(Python 2、16.6章)。Pythonマネージャのアクセス先からレジストリへ

from multiprocessing.managers import SyncManager 
from sys import stderr 

proxy = SyncManager() 
proxy.start() 

dict1 = proxy.dict({'k1': 'blah'}) 
proxy.register('d1', dict1) 

# next line shows that d1 is bound method of manager 
print >>stderr, 'd1 is', proxy.d1 

# next line produces a KeyError 
print 'The value of d1 is', proxy.d1() 

ラン出力

d1 is <bound method SyncManager.d1 of <multiprocessing.managers.SyncManager object at 0x10925dd10>> 

Traceback (most recent call last): 
    File "/Users/adriancepleanu/PycharmProjects/AFX/UIproxy.py", line 32, in <module> 
    print 'The value of d1 is', proxy.d1() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/managers.py", line 667, in temp 
    token, exp = self._create(typeid, *args, **kwds) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/managers.py", line 567, in _create 
    id, exposed = dispatch(conn, None, 'create', (typeid,)+args, kwds) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/managers.py", line 105, in dispatch 
    raise convert_to_error(kind, result) 
multiprocessing.managers.RemoteError: 
--------------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/managers.py", line 207, in handle_request 
    result = func(c, *args, **kwds) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/managers.py", line 380, in create 
    self.registry[typeid] 
KeyError: 'd1' 
--------------------------------------------------------------------------- 

答えて

0

プロキシサーバが新しいタイプを登録するための呼び出しの後を開始しなければならないことがわかりました。プロキシの起動後に行われた登録は機能しません。

関連する問題