Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.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';s多处理。进程类_Python_Class_Multiprocessing - Fatal编程技术网

使用Python';s多处理。进程类

使用Python';s多处理。进程类,python,class,multiprocessing,Python,Class,Multiprocessing,这是一个新手问题: 类是一个对象,所以我可以创建一个名为pippo()的类,在这个add函数和参数中,我不知道pippo中的函数是在我赋值x=pippo()时从上到下执行的,还是我必须在pippo之外调用它们 使用Python的多处理软件包,是更好地定义一个大函数并使用调用Process()中的target参数创建对象,还是通过继承Process类来创建您自己的进程类?我经常想知道为什么Python的doc页面上只显示“functional”(函数)进近(使用目标参数)。可能是因为简洁的代码片段

这是一个新手问题:

类是一个对象,所以我可以创建一个名为
pippo()
的类,在这个add函数和参数中,我不知道
pippo
中的函数是在我赋值
x=pippo()
时从上到下执行的,还是我必须在
pippo
之外调用它们


使用Python的多处理软件包,是更好地定义一个大函数并使用调用
Process()
中的
target
参数创建对象,还是通过继承
Process
类来创建您自己的进程类?

我经常想知道为什么Python的doc页面上只显示“functional”(函数)进近(使用
目标
参数)。可能是因为简洁的代码片段最适合用于说明。对于适合一个功能的小任务,我可以看出这是首选方式,ala:

from multiprocessing import Process

def f():
    print('hello')

p = Process(target=f)
p.start()
p.join()
但是,当您需要更大的代码组织(用于复杂任务)时,创建自己的类是一种方法:

from multiprocessing import Process

class P(Process):
    def __init__(self):
        super(P, self).__init__()
    def run(self):
        print('hello')

p = P()
p.start()
p.join()
请记住,每个派生的进程都是用主进程的内存占用副本初始化的。构造函数代码(即
\uuu init\uuu()
)在主进程中执行——只有
run()
中的代码在单独的进程中执行


因此,如果某个进程(主进程或派生进程)更改了其成员变量,则该更改不会反映在其他进程中。当然,这仅适用于构建类型,如
bool
string
list
,等等。但是,您可以从
多处理
模块导入“特殊”数据结构,然后在进程之间透明地共享这些数据结构(请参阅)。或者,您可以创建自己的IPC通道(进程间通信)例如
多处理.Pipe
多处理.Queue

对于问题的第一部分,如果希望在实例化对象时执行函数,则可以在类
\uuuu init\uuu
函数中对其进行调用。你也可以把它给你。我不知道你在第二部分问什么。您能澄清一下吗?大多数情况下,您会通过引用对象来调用类方法,例如
x.doSomthing()
。通过从类
\uuuu init\uuuu
方法调用方法来实例化对象,也可以在内部使用这些方法。如果希望对象的方法“作为进程运行”,有几种方法。我个人最喜欢的是从
进程
生成子类。我在这里解释一种方法:如果在Windows上运行,多处理不需要
吗?如果派生的进程更改了其类中的某些数据类型,那么这些更改是否可以从主进程中看到?@Woody1193,而不是内置数据类型。但是,如果您使用
多处理
模块中的特殊共享数据类型,您将获得所需的效果。(我在上面的回答中添加了这一解释。)