gpt4 book ai didi

Python 多处理 : Sending data to a process

转载 作者:行者123 更新时间:2023-11-28 20:29:53 25 4
gpt4 key购买 nike

我像这样对 Process 进行了子类化:

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

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

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

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

最佳答案

在 unix 系统上,多进程使用 os.fork() 创建子进程,在 windows 上,它使用一些子进程技巧和序列化来共享数据。所以要跨平台,是的——它必须是可序列化的。 child 将获得一份新副本。

话虽如此,这里有一个例子:

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() 之后,父项所做的更改不会得到传达,而子项所做的更改也有同样的问题。您必须遵守 fork 限制。

关于Python 多处理 : Sending data to a process,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/779384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com