0

我正在使用multiprocessingpython 3.7 中的库。

在我的用例中,我从正常listdicts 开始 - 我使用它从 a 创建一个ListProxy对象,SyncManager然后在池中使用它来同步list(创建如下)。

data = [{...},{...},{...}] # arbitrary list of dicts that I want to sync in a pool

with Manager() as manager:

  list_proxy = manager.list()
  for row in data:
    list_proxy.append(manager.dict(row))

  # ... list_proxy used in pool.starmap later

ListProxy我的问题:一旦池完成运行,是否有一种 pythonic 方法可以将我的背部更改为正常列表?我查看了文档,甚至查看了源代码,似乎唯一的方法可能是使用类中的_getvalue()方法BaseProxy- 但这似乎很老套,而且我还必须递归地“取消代理”任何嵌套的代理对象。

我需要返回正常列表,以便稍后在代码中将其序列化为 json,ProxyObjects 不容易序列化。

4

1 回答 1

1

我相信您可以在代理对象上调用“真实”对象函数并将其转换为“真实”对象。dict请参阅我跨实例共享的代理示例,然后将其转换为“真实” dict以对其进行序列化。

def main(state):
    # Do something to input
    dict_proxy['state'] = state

if __name__ == '__main__':
    manager = Manager()
    dict_proxy = manager.dict()

    num_cores = int(2)
    with Pool(num_cores) as p:
       p.map(main, ['AK', 'HI'])

    dict_real = dict(dict_proxy)
于 2020-05-31T20:02:51.560 回答