使用Python的multiprocessing.Process类

use*_*318 13 python class multiprocessing

这是一个新手问题:

一个类是一个对象,所以我可以创建一个被调用的类pippo(),在这个add函数和参数内部,我不明白pippo当我分配时,里面的函数是从上到下执行x=pippo()还是我必须在x.dosomething()外面调用它们pippo.

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

Vel*_*ker 31

我经常想知道为什么Python的多处理文档页面只显示"功能"方法(使用target参数).可能是因为简洁,简洁的代码片段最适合用于说明目的.对于适合一个函数的小任务,我可以看到这是首选方式,ala:

from multiprocessing import Process

def f():
    print('hello')

p = Process(target=f)
p.start()
p.join()
Run Code Online (Sandbox Code Playgroud)

但是,当您需要更多的代码组织(对于复杂的任务)时,创建自己的类是可行的方法:

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()
Run Code Online (Sandbox Code Playgroud)

请记住,每个生成的进程都使用主进程的内存占用的副本进行初始化.并且构造函数代码(即内部的东西__init__())在主进程中run()执行- 只有内部代码在单独的进程中执行.

因此,如果进程(主进程或衍生进程)更改了其成员变量,则更改将不会反映在其他进程中.这,当然,是唯一真正的储存卡,在类型,如bool,string,list,等.但是,您可以导入"特殊"的数据,从结构multiprocessing,其将被透明进程间共享模块(请参阅进程间共享状态.)或者,您可以创建自己的IPC(进程间通信)渠道,如multiprocessing.Pipemultiprocessing.Queue.

  • 如果你在Windows上运行,多处理是否需要`if __name__ =="__ main __"` 另外一个值得注意的惊喜 (2认同)