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()

还有一个函数 generateNos,它只生成 3 个 Nos。因此,当我如下调用此函数两次时,我得到的输出为:- 1 2 3 4 5 6

现在,当我生成两个调用此 generateNos() 的进程时,我得到的输出为:- 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 相同的行为。

任何 hack,以便 Generate() 对象“g = Generate().iter()”不会在子进程中再次被调用,它应该只在父进程中调用一次。

4

1 回答 1

2

您必须通过共享内存或其他允许它们实际共享相同对象实例的机制在进程之间共享对象。启动一个新的子进程实际上会腌制您传递给子进程的所有内容,然后在子进程中重建一个副本。

于 2012-08-02T10:59:31.387 回答