在 unix 系统上,多处理使用 os.fork() 创建子进程,在 Windows 上,它使用一些子进程技巧和序列化来共享数据。所以要跨平台,是的 - 它必须是可序列化的。孩子将得到一份新副本。
话虽如此,这里有一个例子:
from multiprocessing import Process
import time
class Starter(object):
def __init__(self):
self.state = False
x = Starter()
class EdgeRenderer(Process):
def __init__(self,starter,*args,**kwargs):
Process.__init__(self,*args,**kwargs)
self.starter=starter
def run(self):
self.starter.state = "HAM SANDWICH"
time.sleep(1)
print self.starter.state
a = EdgeRenderer(x)
a.start()
x.state = True
a.join()
print x.state
运行时,您将看到:
HAM SANDWICH
True
因此,在 fork() 之后,父母所做的更改不会得到传达,而孩子所做的更改也有同样的问题。你必须遵守分叉限制。