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

Passing dictionary to two subprocesses in Python

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

我查字典的时候,里面只有第三个函数的内容。我正在谈论的一个例子如下:

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)

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

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

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

或者,如果您确实打算使用 threads,则需要切换到使用 threading 模块。 https://docs.python.org/2/library/thread.html(注意本例中的 GIL)