是否可以使用pool.map()将多个过程写入同一字典



我正在使用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中的同一字典?

是否可以将多个过程写入Python?

否,不可能在过程之间共享词典,因为每个过程都在单独的内存空间中运行,而python代码涉及由解释器的不同副本来解释,尽管可以通过共享记忆来完成其他数据 - 类型。

但是,可以通过使用multiprocessing.Manager()将其协调到某些类型的共享对象的更新,而受支持的类型之一是dict

这将在在线文档的流程部分之间的共享状态中进行讨论。使用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)))

相关内容

  • 没有找到相关文章