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()" が子プロセスで再度呼び出されないようにするハック。親プロセスで一度だけ呼び出す必要があります。