Python多处理:向进程发送数据

2024-09-30 02:27:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我将Process子类化如下:

class EdgeRenderer(Process):
    def __init__(self,starter,*args,**kwargs):
        Process.__init__(self,*args,**kwargs)
        self.starter=starter

然后我定义了一个使用self.starterrun方法。在

starter对象属于我定义的State类。在

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


Tags: 对象方法runself序列化定义initdef
1条回答
网友
1楼 · 发布于 2024-09-30 02:27:26

在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

运行时,您将看到:

^{pr2}$

因此父级所做的更改不会在fork()之后进行通信,而子级所做的更改也有相同的问题。你必须遵守fork限制。在

相关问题 更多 >

    热门问题