python多处理成员变量未设置

时间:2010-04-21 19:11:17

标签: python multiprocessing

在下面的脚本中,我收到“收到停止消息”输出但该过程永远不会结束。这是为什么?除了终止或os.kill之外还有另一种方法来结束这个过程吗?

from multiprocessing import Process
from time import sleep

class Test(Process):
    def __init__(self):
        Process.__init__(self)
        self.stop = False

    def run(self):
        while self.stop == False:
            print "running"
            sleep(1.0)

    def end(self):
        print "stop message received"
        self.stop = True

if __name__ == "__main__":
    test = Test()
    test.start()
    sleep(1.0)
    test.end()
    test.join()

1 个答案:

答案 0 :(得分:3)

start方法将对象克隆到一个单独的进程中,执行runend方法没有什么特别之处,因此它在调用它的过程中运行 - 它对该对象执行的更改不会发送到克隆对象。

因此,请使用适当的进程间通信方式,例如multiprocessing.Evet实例,例如:

from multiprocessing import Process, Event
from time import sleep

class Test(Process):
    def __init__(self):
        Process.__init__(self)
        self.stop = Event()

    def run(self):
        while not self.stop.is_set():
            print "running"
            sleep(1.0)

    def end(self):
        print "stop message received"
        self.stop.set()

if __name__ == "__main__":
    test = Test()
    test.start()
    sleep(1.0)
    test.end()
    test.join()

如您所见,所需的更改很少。