我在线程中调用了两个函数,每个函数都传递了它们添加到的同一词典。在这两个线程化函数完成之后,我还有第三个函数在线程外运行,这也将项添加到字典中。
当我检查字典的内容时,它仅包含第三个函数的内容。我在说的一个例子如下:
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)
允许我将字典传递给每个函数(是否带线程)并确保插入所有值的解决方法是什么?
答案 0 :(得分:2)
您正在使用multiprocessing
。它为您正在调用的每个函数启动新的Processes
。与threading
不同,进程不占用内存空间。您正在分流的两个进程中的每一个都将获得my_dict
的副本。因此,从my_dict
或process1
对proces2
所做的修改对于my_dict
中的class3
是不可见的(因为它们是不同存储空间中的不同对象) )
如果要在进程之间共享信息,可以使用Queues
-让每个进程将修改后的字典发送回队列消息中,然后进行合并,然后将其传递给class3
。 https://docs.python.org/2/library/multiprocessing.html#pipes-and-queues
或者,如果您实际上打算使用threads
,则需要切换到使用threading
模块。 https://docs.python.org/2/library/thread.html(在这种情况下,请注意GIL)