将字典传递给 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
的副本。因此,从 process1
或 proces2
对 my_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)
我在一个线程中调用了两个函数,每个函数都传入它们添加到的同一个字典。我还有第三个函数,它在两个线程函数完成后在线程外运行,该函数也将项目添加到字典中。
我查字典的时候,里面只有第三个函数的内容。我正在谈论的一个例子如下:
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
的副本。因此,从 process1
或 proces2
对 my_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)