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



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

我是 Python OOP 的新手,也是 Python 中流程的新手。我在 Python 3.4 中使用多处理,但使用新的打印功能也应该以 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一样运行。

多处理库通过生成额外的 Python 进程来工作。它们不共享内存。

我看到您确实从多处理库中导入了Queue,但继续不使用它。该Queue是您可以在Process之间进行通信的两种方式之一,另一种是 Pipe .

在继续之前,可能值得通读多处理库的文档。

最新更新