将字典传递给Python中的两个子流程

时间:2019-04-18 10:31:27

标签: python python-multiprocessing

我在线程中调用了两个函数,每个函数都传递了它们添加到的同一词典。在这两个线程化函数完成之后,我还有第三个函数在线程外运行,这也将项添加到字典中。

当我检查字典的内容时,它仅包含第三个函数的内容。我在说的一个例子如下:

from multiprocessing import Process, Pipe

my_dict = {}

process1 = Process(target=class1.run, args=(my_dict,))
process2 = Process(target=class2.run, args=(my_dict,))

process1.start()
process2.start()

process1.join()
process2.join()

class3.run(my_dict)

print(my_dict)

允许我将字典传递给每个函数(是否带线程)并确保插入所有值的解决方法是什么?

1 个答案:

答案 0 :(得分:2)

您正在使用multiprocessing。它为您正在调用的每个函数启动新的Processes。与threading不同,进程不占用内存空间。您正在分流的两个进程中的每一个都将获得my_dict的副本。因此,从my_dictprocess1proces2所做的修改对于my_dict中的class3是不可见的(因为它们是不同存储空间中的不同对象) )

如果要在进程之间共享信息,可以使用Queues-让每个进程将修改后的字典发送回队列消息中,然后进行合并,然后将其传递给class3https://docs.python.org/2/library/multiprocessing.html#pipes-and-queues

或者,如果您实际上打算使用threads,则需要切换到使用threading模块。 https://docs.python.org/2/library/thread.html(在这种情况下,请注意GIL)