Python多处理问题

时间:2012-08-02 10:54:17

标签: python multiprocessing

我有一小段代码,用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 五 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()”在子进程中不再被调用,它应该只在Parent进程中被调用一次。

1 个答案:

答案 0 :(得分:2)

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