Ich habe einen Manager mit einem Diktat-Proxy. Ich möchte von einem anderen Prozess aus darauf zugreifen. Der Kürze halber verwendet der Beispielcode nur einen Prozess, nimmt jedoch an, dass wir keinen direkten Verweis darauf haben (als ob der andere Prozess aus dem ersten erstellt wurde). Ich registriere dict proxy dict1 unter typeName 'd1', damit ich remote darauf zugreifen kann. Ich überprüfe die Registry des Managers und sehe dort den dict proxy. Aber wenn ich versuche, darauf zuzugreifen, indem ich d1 anrufe, bekomme ich einen KeyError von der Fernbedienung. Ich weiß, dass ich eine Methode erstellen konnte, um auf mein dict zuzugreifen, aber es muss einen direkten Weg geben, um auf den dict-Proxy gemäß der Dokumentation zuzugreifen (Python 2, Kapitel 16.6).Python Manager Zugriff dict über die Registrierung
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()
Run Ausgang
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'
---------------------------------------------------------------------------