我正在使用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)))