我经常想知道为什么Python的有关多处理的doc页面仅显示“功能性”方法(使用
target参数)。可能是因为简洁的代码段最适合用于说明目的。对于适合一个功能的小任务,我可以看到这是首选的方式,ala:
from multiprocessing import Processdef f(): print('hello')p = Process(target=f)p.start()p.join()但是,当您需要更大的代码组织(用于复杂的任务)时,创建自己的类是可行的方法:
from multiprocessing import Processclass 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。



