这是一个新问题:
类是一个对象,因此我可以创建一个名为pippo()
的类,在这个add函数和参数的内部,我不理解当我分配pippo
时,是否从上到下执行x=pippo()
内部的函数,或者我必须将它们称为x.dosomething()
外部的函数。
使用python的多处理包,更好的方法是定义一个大函数并使用pippo
调用中的target
参数创建对象,还是从Process()
类继承创建自己的进程类?
最佳答案
我经常想知道为什么python的doc page onmultiprocessing只显示“功能性”方法(使用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()
内的代码在单独的进程中执行。因此,如果一个进程(主进程或派生进程)更改了它的成员变量,则更改不会反映在其他进程中。当然,这只适用于bulit类型,如
bool
、string
、list
等。但是,您可以从multiprocessing
模块导入“特殊”数据结构,然后在进程之间透明地共享这些数据结构(请参见Sharing state between processes),或者,您可以创建自己的IPC通道(进程间通信),如multiprocessing.Pipe
anDmultiprocessing.Queue
。