Python多处理:将数据发送到进程

Ram*_*hum 2 python multiprocessing

我有这样的子Process类:

class EdgeRenderer(Process):
    def __init__(self,starter,*args,**kwargs):
        Process.__init__(self,*args,**kwargs)
        self.starter=starter
Run Code Online (Sandbox Code Playgroud)

然后我定义了一个run使用的方法self.starter.

该starter对象属于State我定义的类.

我可以这样做吗?对象会发生什么?它是否被序列化?这是否意味着我总是要确保State对象是可序列化的?新进程是否获得此对象的副本?

jno*_*ler 8

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

运行时,您会看到:

HAM SANDWICH
True
Run Code Online (Sandbox Code Playgroud)

因此父进行的更改不会在fork()之后进行通信,并且子进程所做的更改会产生相同的问题.你必须遵守fork限制.

  • 我假设您正在讨论multiprocessing.queue,它的处理方式与其他对象不同,请查看:http://svn.python.org/view/python/trunk/Lib/multiprocessing/queues.py?view =标记 (2认同)