这是一个新手问题:
一个类是一个对象,所以我可以pippo()
在这个添加函数和参数内部创建一个名为 and 的类,我不明白pippo
在我分配时内部的函数是从上到下执行的,x=pippo()
还是我必须将它们作为x.dosomething()
外部调用pippo
。
使用 Python 的 multiprocessing 包,是定义一个大函数并使用target
调用中的参数创建对象更好Process()
,还是通过从类继承来创建自己的进程Process
类?
这是一个新手问题:
一个类是一个对象,所以我可以pippo()
在这个添加函数和参数内部创建一个名为 and 的类,我不明白pippo
在我分配时内部的函数是从上到下执行的,x=pippo()
还是我必须将它们作为x.dosomething()
外部调用pippo
。
使用 Python 的 multiprocessing 包,是定义一个大函数并使用target
调用中的参数创建对象更好Process()
,还是通过从类继承来创建自己的进程Process
类?
我经常想知道为什么 Python 的多处理文档页面只显示“功能”方法(使用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()
在单独的进程中执行。
因此,如果一个进程(主进程或衍生进程)更改了它的成员变量,则该更改不会反映在其他进程中。当然,这仅适用于内置类型,例如bool
, string
,list
等。但是,您可以从模块导入“特殊”数据结构,multiprocessing
然后在进程之间透明地共享(请参阅进程之间的共享状态。)或者,您可以创建您自己的 IPC(进程间通信)通道,例如multiprocessing.Pipe
和multiprocessing.Queue
。