Python;在X秒内调用函数,除非发生事件

2024-10-04 11:36:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有控制机器人的Python代码。我命令它转动马达,这会引起一个真实的事件发生。如果在5秒钟内什么都没有发生(在这种情况下,没有发送POST请求),我希望第二组电机转动以提示操作。如果收到请求,则取消即将到来的计时器。如果计时器点击5并调用提示功能,则设置另一个计时器以防需要更多提示。这是我的伪代码:

rotateMotor(BP.PORT_B, -360)
timer = Timer(5, promptEvent())
timer.start()

def eventReceiver():
    timer.cancel()
    rotateMotor(BP.PORT_B, -360)
    timer.start()

def promptEvent():
    rotateOtherMotors()
    timer.start()

我的问题是我得到了错误RuntimeError: threads can only be started once。很公平,不过我在Python方面经验不足,不知道如何处理线程来正确处理这个问题。你知道吗


Tags: 代码命令portdef事件情况机器人post
1条回答
网友
1楼 · 发布于 2024-10-04 11:36:00

在我看来,你要启动两次计时器,这不是个好主意。如果你真的需要2个时间计数器,你可能需要使用第二个计时器

rotateMotor(BP.PORT_B, -360)
timer = Timer(5, promptEvent()) // first timer.start() (or time-wise second)
timer.start() // second timer.start() (or time-wise first)

添加:

好吧,似乎您需要一个计时工具,而从Thread继承的Timer是一个不可重用的对象。您可以使用alter对象Timer,也可以将执行代码的方式更改为下面的简化的示例:

while motor_needs_to_turn:
    starting_time = time.time()
    rotateMotor(BP.PORT_B, -360)
    while time.time() - starting_time < 5:
        if event_triggered: // request received
            starting_time = time.time()
            rotateMotor(BP.PORT_B, -360)
    rotateOtherMotors()

相关问题 更多 >