簡體   English   中英

Python多處理:將數據發送到進程

[英]Python Multiprocessing: Sending data to a process

我有這樣的子類化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上,它使用一些子進程技巧和序列化來共享數據。 所以要跨平台,是的 - 它必須是可序列化的。 孩子將獲得一份新副本。

話雖如此,這是一個例子:

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限制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM