Python中的事件监听器

时间:2017-12-12 03:51:40

标签: python asynchronous listener robot

我正准备自己做一个机器人。该机器人具有路线规划器,该路线规划器生成指示移动(前进,右转等)的命令列表,并且必须连续执行每个步骤。它将具有接近传感器,当前方有障碍物并且必须重新路由时,它将通知机器人。我正在使用生成器函数和虚拟lambda函数,如下面的代码所示:

import time
import threading as thr

class Tester():
    def __init__(self):
        self.toDo = [lambda: self.display_with_lag("a"),
                     lambda: self.display_with_lag("b"),
                     lambda: self.display_with_lag("c")]

    def display_with_lag(self, arg):
        print("wait...")
        time.sleep(2)
        print("the value is %s" % arg)

    def step(self):
        while True:
            try:
                print("You're performing a step")
                self.toDo[0]()
                del self.toDo[0]
                yield self.toDo[0]
            except Exception:
                print("Either there was an error or it's over, doesn't matter as of now")
                break

    def execute(self):
        orders = self.step()
        while True:
            try:
                next(orders)
            except StopIteration:
                break

if __name__ == "__main__":
    test = Tester()    
    executer = thr.Thread(target=test.execute)
    executer.start() 

display_with_lag()将成为我的机器人动作,并且会根据您的期望与toDo分开添加到__init__()

我知道线程现在是不必要的,但现在我想添加一个类型的事件监听器,如果我在任何时候按下某个键击它将停止它正在做的任何事情,擦除test.toDo,追加新的函数,并返回运行test.execute()并对test.toDo进行更改。这将模拟我的接近传感器。我打算使用RPi并将传感器连接到一个引脚,从我读过的内容来看,GPIO包含了我想要的功能,但我不知道如何使用它,如果有可能,我会喜欢也知道一般,python的方式。提前谢谢。

0 个答案:

没有答案