在Python中将字典传递给两个子进程
我在一个线程中调用了两个函数,每个函数都传递到它们添加到的同一个字典中。我还有第三个函数,在两个线程函数完成后在线程外运行,该函数还向字典中添加项 当我检查字典的内容时,它只包含第三个函数的内容。下面是我所说的一个例子:在Python中将字典传递给两个子进程,python,python-multiprocessing,Python,Python Multiprocessing,我在一个线程中调用了两个函数,每个函数都传递到它们添加到的同一个字典中。我还有第三个函数,在两个线程函数完成后在线程外运行,该函数还向字典中添加项 当我检查字典的内容时,它只包含第三个函数的内容。下面是我所说的一个例子: from multiprocessing import Process, Pipe my_dict = {} process1 = Process(target=class1.run, args=(my_dict,)) process2 = Process(target=c
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)
有什么解决方法可以让我将字典传递给每个函数(线程化或非线程化)并确保插入所有值?您使用的是
多处理。它为您正在调用的每个函数生成新的进程。与线程不同,进程不共享内存空间。您正在旋转的两个进程中的每一个都将获得一份my\u dict
。因此,从process1
或proces2
对my_dict
所做的修改对于class3
中的my_dict
将不可见(因为它们是不同内存空间中的不同对象)
如果要在进程之间共享信息,可以使用队列
——让每个进程将修改后的dict发送回队列消息中,然后合并,然后再将其传递给class3
或者,如果您实际上打算使用线程
,则需要切换到使用线程
模块。(注意本例中的GIL)您使用的是多处理
。它为您正在调用的每个函数生成新的进程。与线程不同,进程不共享内存空间。您正在旋转的两个进程中的每一个都将获得一份my\u dict
。因此,从process1
或proces2
对my_dict
所做的修改对于class3
中的my_dict
将不可见(因为它们是不同内存空间中的不同对象)
如果要在进程之间共享信息,可以使用队列
——让每个进程将修改后的dict发送回队列消息中,然后合并,然后再将其传递给class3
或者,如果您实际上打算使用线程
,则需要切换到使用线程
模块。(在这种情况下要注意GIL)的答案可能会帮助你的答案可能会帮助你这是唯一的伴侣。。。非常感谢你,伙计。我把它改成了穿线,它成功了。这是唯一的伴侣。。。非常感谢你,伙计。我把它改成了线程,它成功了。