gpt4 book ai didi

python - 是否可以让多个进程使用 Pool.map() 写入同一个字典?

转载 作者:太空宇宙 更新时间:2023-11-04 02:04:31 26 4
gpt4 key购买 nike

我正在使用 python3.6 并尝试执行类似于以下代码的操作。但是,执行后变量 mydict 仍然是 {}

我已经尝试过使用 global mydict 和不使用它。我认为默认情况下口述是全局的,但似乎都不起作用。

mydict = {}
def TEST(hello, integer):
global mydict
mydict[integer] = hello
print(integer)
with closing(Pool(processes=4)) as pool:
pool.starmap(TEST, [['Hello World', i] for i in range(200)])

是否可以让多个进程在 python 中写入同一个字典?

最佳答案

Is is possible to have multiple processes write to the same dictionary in python?

不,不可能在进程之间共享字典,因为每个进程都在单独的内存空间中运行,所涉及的 Python 代码由解释器的不同副本解释——尽管这可以通过共享内存来实现一些其他数据——类型。

然而,它可以通过使用 multiprocessing.Manager() 来模拟协调对某些类型的共享对象的更新——其中一种受支持的类型是 dict

这在 Sharing state between processes 中进行了讨论联机文档的一部分。使用 Manager 会产生大量开销,因为它们作为单独的服务器进程与您的代码创建的任何其他进程并行运行。

无论如何,这是一个基于您问题中代码的工作示例,它使用一个来管理对共享字典的并发更新。由于 TEST() 函数所做的事情是如此微不足道,因此很有可能以这种方式执行此操作比使用 multiprocessing慢>,由于它需要所有额外的开销——然而,这样的东西可能适用于更多的计算密集型任务。

from contextlib import closing
from multiprocessing import Pool, Manager

def TEST(mydict, hello, integer):
mydict[integer] = hello
print(integer)

if __name__ == '__main__':

with Manager() as manager:
my_dict = manager.dict()

with closing(Pool(processes=4)) as pool:
pool.starmap(TEST, ((my_dict, 'Hello World', i) for i in range(200)))

关于python - 是否可以让多个进程使用 Pool.map() 写入同一个字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55013322/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com