0

Python で記述された小さなコードがあります。これには、呼び出されたときに次の番号を返す Generate クラスがあります。

class Generate:
    def iter(self):
        self.next1 = 1
        return self
    def next(self):
        self.curr = self.next1
        self.next1 += 1
        return self.curr

def generateNos():
    for i in xrange(3):
        print g.next()

g = Generate().iter()

generateNos()
generateNos()

そして、3つの番号のみを生成する関数generateNos。したがって、この関数を以下のように 2 回呼び出すと、次のような出力が得られます:- 1 2 3 4 5 6

ここで、この generateNos() を呼び出すための 2 つのプロセスを生成すると、次のような出力が得られます:- 1 2 3 1 2 3

同じコードは次のとおりです。

from multiprocessing import Process, Manager
class Generate:
    def iter(self):
        self.next1 = 1
        return self
    def next(self):
        self.curr = self.next1
        self.next1 += 1
        return self.curr

def generateNos():
    for i in xrange(3):
        print g.next()

g = Generate().iter()

p1 = Process(target = generateNos)
p2 = Process(target = generateNos)

p1.start()
p1.join()

p2.start()
p2.join()

今では、この Generate クラスが子プロセスで再度初期化されるようですが、これは望ましくありません。どうすればこれを回避できますか?

generateNos を次々と 2 回呼び出すのと同じ動作が必要でした。

Generate() オブジェクト " g = Generate().iter()" が子プロセスで再度呼び出されないようにするハック。親プロセスで一度だけ呼び出す必要があります。

4

1 に答える 1

2

共有メモリまたはプロセスが実際に同じオブジェクトインスタンスを共有できるようにするその他のメカニズムを介して、プロセス間でオブジェクトを共有する必要があります。新しいサブプロセスを開始すると、実際には子プロセスに渡したすべてのものが選択され、サブプロセスでコピーが再構築されます。

于 2012-08-02T10:59:31.387 に答える