来自远程管理器的AutoProxy对象中的Dict不是subscriptab

2024-09-30 22:17:26 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的密码。你知道吗

from multiprocessing.managers import BaseManager
from threading import Thread

def manager1():
    my_dict = {}
    my_dict['key'] = "value"

    print(my_dict['key']) #this works

    class SyncManager(BaseManager): pass

    SyncManager.register('get_my_dict', callable=lambda:my_dict)
    n = SyncManager(address=('localhost', 50001), authkey=b'secret')
    t = n.get_server()
    t.serve_forever()

def get_my_dict_from_the_manager():
    class SyncManager(BaseManager): pass

    SyncManager.register('get_my_dict')
    n = SyncManager(address=('localhost', 50001), authkey=b'secret')
    n.connect()
    my_dict = n.get_my_dict()
    return my_dict

thread1 = Thread(target=manager1)
thread1.daemon = True
thread1.start()
my_dict = get_my_dict_from_the_manager()
print(my_dict.keys()) #this works
print(my_dict['key']) #DOES NOT WORK

在脚本的最后一行,我尝试通过使用键订阅来访问字典my_dict中的值。这会引发一个错误。这是我的终端输出:

value
['key']
Traceback (most recent call last):
  File "/home/magnus/PycharmProjects/docker-falcon/app/so_test.py", line 31, in <module>
    print(my_dict['key'])
TypeError: 'AutoProxy[get_my_dict]' object is not subscriptable

Process finished with exit code 1

似乎AutoProxy对象的行为类似于它应该代理的dict,但并不完全如此。有没有办法让它可以订阅?你知道吗


Tags: keyfromimportgetvaluemydefthis
1条回答
网友
1楼 · 发布于 2024-09-30 22:17:26

问题是AutoProxy对象没有公开__getitem__方法,而dict通常具有该方法。对我的similar question的回答允许您通过它们的键来访问项目:只需将print(my_dict['key'])替换为print(my_dict.get('key'))

相关问题 更多 >