Python 多处理中通过键访问dict中的值
使用多处理模块,我编写了一个服务器来为dict提供服务。现在,尝试使用客户端通过键访问dict,我得到以下错误(Python 多处理中通过键访问dict中的值,python,dictionary,multiprocessing,Python,Dictionary,Multiprocessing,使用多处理模块,我编写了一个服务器来为dict提供服务。现在,尝试使用客户端通过键访问dict,我得到以下错误(server.py和client.py位于文章的底部): 这与server.py中的print(dir(my_dict))的输出不同: ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattr
server.py
和client.py
位于文章的底部):
这与server.py中的print(dir(my_dict))
的输出不同:
['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
看起来这个Autoproxy对象保留了dict
对象的一些方法,但显然不是所有方法。关键的是它没有保留\uuu getitem\uuu
方法,该方法阻止我通过键访问项目
我如何通过按键访问dict
项?另外,任何关于Proxy
s如何使用Python多处理的解释都会非常有用
注意:我不需要修改dict
值,我只需要按键提取它们
server.py:
from multiprocessing.managers import SyncManager
my_dict = {'item_1': 1, 'item_2':2}
def get_my_dict():
return my_dict
class MyManager(SyncManager):
pass
if __name__ == "__main__":
port_num = 4343
MyManager.register("get_dict", get_my_dict)
manager = MyManager(("127.0.0.1", port_num), authkey=b"password")
manager.start()
input("Press any key to kill server".center(50, "-"))
manager.shutdown
client.py
from multiprocessing.managers import SyncManager
import sys
class MyManager(SyncManager):
pass
MyManager.register("get_dict")
if __name__ == "__main__":
port_num = 4343
manager = MyManager(("127.0.0.1", port_num), authkey=b"password")
manager.connect()
my_dict = manager.get_dict()
print("dict = %s" % (dir(my_dict)))
keys = list(my_dict.keys())
print(keys)
for key in keys:
print(my_dict[key])
您可以使用get
在任何版本中获取字典的元素
from multiprocessing.managers import SyncManager
my_dict = {'item_1': 1, 'item_2':2}
def get_my_dict():
return my_dict
class MyManager(SyncManager):
pass
if __name__ == "__main__":
port_num = 4343
MyManager.register("get_dict", get_my_dict)
manager = MyManager(("127.0.0.1", port_num), authkey=b"password")
manager.start()
input("Press any key to kill server".center(50, "-"))
manager.shutdown
from multiprocessing.managers import SyncManager
import sys
class MyManager(SyncManager):
pass
MyManager.register("get_dict")
if __name__ == "__main__":
port_num = 4343
manager = MyManager(("127.0.0.1", port_num), authkey=b"password")
manager.connect()
my_dict = manager.get_dict()
print("dict = %s" % (dir(my_dict)))
keys = list(my_dict.keys())
print(keys)
for key in keys:
print(my_dict[key])