繁体   English   中英

使用Python的multiprocessing.Process类

[英]Using Python's multiprocessing.Process class

这是一个新手问题:

一个类是一个对象,因此我可以创建一个名为pippo()的类,并在此add函数和参数中创建一个类,当分配x=pippo()时,我不理解pippo内部的函数是否从上到下执行否则我必须在pippo之外将它们称为x.dosomething()

使用Python的多处理程序包,是更好的方法是定义一个大函数并在对Process()的调用中使用target参数创建对象,或者通过从Process类继承来创建自己的Process类?

我经常想知道为什么Python的有关多处理的doc页面仅显示“功能性”方法(使用target参数)。 可能是因为简洁的代码段最适合用于说明目的。 对于适合一个功能的小型任务,我可以看到这是首选的方式,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()

请记住,每个生成的进程都使用主进程的内存占用量副本进行初始化。 而且构造函数代码(即__init__() )是在主进程中执行的-仅run()内部的代码在单独的进程中执行。

因此,如果某个进程(主进程或生成的进程)更改了其成员变量,则该更改将不会反映在其他进程中。 当然,这仅适用于boil-in类型,例如boolstringlist等。但是,您可以从multiprocessing模块导入“特殊”数据结构,然后在进程之间透明地共享它们(请参见在进程之间共享状态 。)或者,您可以创建自己的IPC(进程间通信)通道,例如multiprocessing.Pipemultiprocessing.Queue

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM