Python 使用multiprocessing.managers.SyncManager共享常量值

Python 使用multiprocessing.managers.SyncManager共享常量值,python,multiprocessing,cluster-computing,distributed-computing,Python,Multiprocessing,Cluster Computing,Distributed Computing,考虑网络化多处理设置,即一台服务器和两个队列与网络上的多个连接客户端共享 我想扩展这个示例,以便服务器可以与所有客户端共享一些参数。按照链接的代码,我通过注册额外的可调用get_params位扩展了服务器端的JobQueueManager: 为了实现这一点,我必须按如下方式更改客户机代码 job_q = manager.get_job_q() result_q = manager.get_result_q() params = manager.get_params()

考虑网络化多处理设置,即一台服务器和两个队列与网络上的多个连接客户端共享

我想扩展这个示例,以便服务器可以与所有客户端共享一些参数。按照链接的代码,我通过注册额外的可调用get_params位扩展了服务器端的JobQueueManager:

为了实现这一点,我必须按如下方式更改客户机代码

job_q       = manager.get_job_q()
result_q    = manager.get_result_q()
params      = manager.get_params()._getvalue()

但是,为什么我需要_getvalue,而队列上不需要它?有更好的/合适的方法吗?

您需要指定您想要一个ListProxy,这样您就可以无缝地访问正常的列表\uuuu dunder\uuuuuu方法,如\uuu getitem\uuuuuuuuuuu、\uuuuuuu setitem\uuuuuuuuuuuuuu等

如果不指定ListProxy,那么最终只能从list对象append、extend等访问公共方法

job_q       = manager.get_job_q()
result_q    = manager.get_result_q()
params      = manager.get_params()._getvalue()
from multiprocessing.managers import ListProxy

JobQueueManager.register('get_params', callable=lambda: ['123'], proxytype=ListProxy)