为什么这个类范围变量没有在递归函数中更新?

时间:2014-11-16 18:58:40

标签: python

我正在为LED控制器编写一个小类,它作为一个进程运行。这个想法是一些代码不断运行以使i2c总线上的LED闪烁。

我是Python的OOP新手,我也是python中Processes的新手。我在Python 3.4中使用Multiprocessing,但新的打印功能也应该在2.7x中运行。

如果你运行代码,我在blinkgroup列表中添加了三个东西,它在本地显示已经产生效果,但是在ledblinkloop函数中永远不会检测到它,它会调用自身以便它继续运行。

我怀疑我在Python中从根本上误解了一些东西。

from multiprocessing import Process, Queue
import time

class LedController(Process):
    def __init__(self):     
        super(LedController, self).__init__()
        print("ledcontroller started: ",self.name)
        self.blinkgroup = [0x04,0x05]

    def run(self):
        self.ledblinkloop()

    def led_blink_on(self,led):
        if(led not in self.blinkgroup):
            print("LED not in blink group, adding. New blinkgroup length:",len(self.blinkgroup))
            self.blinkgroup.append(led)

    def ledblinkloop(self):
        print("Length of blinkgroup:",len(self.blinkgroup))
        time.sleep(1)
        self.ledblinkloop()

class myclass:
    def __init__(self):
        ledcontroller = LedController()
        ledcontroller.start()

        while(1):
            time.sleep(5)
            ledcontroller.led_blink_on(0x08)
            ledcontroller.led_blink_on(0x09)
            ledcontroller.led_blink_on(0x10)
            time.sleep(5)

if __name__ == "__main__":

代码应该像Python 3一样运行。

1 个答案:

答案 0 :(得分:0)

多处理库通过生成其他Python进程来工作。他们没有共享记忆。

我看到你从多处理库中导入Queue,但继续不使用它。 QueueProcess es之间可以沟通的两种方式之一,另一种方式是Pipe

在继续之前,阅读documentation多处理库可能是值得的。