Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.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,如果我将对实例方法的引用而不是模块级方法的引用传递到多处理.Process,当我调用它时,它的start方法是传入的父进程实例的精确副本,还是再次调用构造函数?“deep”实例成员对象会发生什么情况?确切副本或默认值?实例不会在进程之间传递,因为实例是每个Python VM进程的 进程之间传递的值是pickled。取消勾选通常通过调用\uuuuu init\uuuu以外的方法恢复实例;据我所知,它直接设置属性值以恢复实例,并解析对其他实例的引用 如果您在两个进程中运行相同的代码(并且使用多处理)

如果我将对实例方法的引用而不是模块级方法的引用传递到
多处理.Process
,当我调用它时,它的start方法是传入的父进程实例的精确副本,还是再次调用构造函数?“deep”实例成员对象会发生什么情况?确切副本或默认值?

实例不会在进程之间传递,因为实例是每个Python VM进程的

进程之间传递的值是
pickle
d。取消勾选通常通过调用
\uuuuu init\uuuu
以外的方法恢复实例;据我所知,它直接设置属性值以恢复实例,并解析对其他实例的引用

如果您在两个进程中运行相同的代码(并且使用
多处理
),则会在已恢复的实例链中恢复对正确实例方法的引用

这意味着,如果对象链中的
\uuuu init\uuuu
做了一些副作用的事情,那么它将不会在接收端(即在子流程中)完成。显式地执行此类初始化


总而言之,在并行进程之间共享(有效地)不可变对象,并在
join()
ing所有对象之后协调结果是最容易的。

解析对其他实例的引用是什么意思?假设其中一个实例属性是db连接对象。如何重新创建这样一个有状态属性?想象一下序列化
和反序列化('a','b')
。一旦恢复了
'a'
'b'
,就会重新创建一个
元组
实例,并将其作为第一和第二个元素指向新创建的Sting。这同样适用于几乎所有的实例属性:在没有移动部件的情况下,很少序列化单个对象,并且所有移动部件都是对其他对象的引用。它显然不能序列化db连接对象。序列化它不是一个好主意,但仍然有。