Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中将字典传递给两个子进程_Python_Python Multiprocessing - Fatal编程技术网

在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)

的答案可能会帮助你的答案可能会帮助你这是唯一的伴侣。。。非常感谢你,伙计。我把它改成了穿线,它成功了。这是唯一的伴侣。。。非常感谢你,伙计。我把它改成了线程,它成功了。