python共享dict_类内的Python多处理共享dict

您需要更改函数f中的行:d['i'] = [i]

像是

^{pr2}$

这样,您的进程就不会在共享dict中覆盖彼此的条目,然后,它就可以正常工作了(在python2.7.3中),打印出来

^{3}$

(另外,您发布的代码缺少import multiprocessing as mp)

更新:如果您只希望共享dict中的值是列表,那么这是一个简单的更改,例如d[str(i)] = [i]

如果希望在所有进程中共享每个列表,则可能需要在主进程中使用manager.list()创建这些列表,并将这些列表传递给所有子流程,例如:count = 5

lists = [manager.list() for i in range(count)]

for i in range(count):

d[i] = lists[i]

processes = [mp.Process(target=self.f, args=(d,i, lists)) for i in range(count)]

[…]def f(self,d,i, lists):

for j in range(i): # just an example to show

lists[j].append(i) # that the lists are shared between processes

我还尝试将托管列表直接嵌套在托管dict中,但由于某些原因,这不起作用,子进程也无法更新列表。如图所示分别传递它们似乎有效,例如,我可以让每个子流程更新多个列表:{0: [1, 2, 3, 4], 1: [2, 3, 4], 2: [3, 4], 3: [4], 4: []}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值