异步/多线程与 blin

2024-04-29 12:30:23 发布

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

我有一个树莓派,我已经连接了一个4按钮键盘。使用blinker的信号,我把它连接起来运行一些方法。在

#sender
while True:
    if buttonIsDown == True: signal.send()

#reciever
@signal.connect
def sayHI():
    print("1")
    time.sleep(10)
    print("2")

这工作得很好,但是当我第二次按下按钮时(在上一次按下按钮的10秒内),它不会在线程暂停在time.sleep(10)中时触发该方法。在

如何让它在暂停时再次激发该方法(可能在另一个线程中)


Tags: 方法truesignaliftime信号sleep键盘
1条回答
网友
1楼 · 发布于 2024-04-29 12:30:23

这是一个老问题,但对其他人来说还是有用的。在

您可以在每次发出信号时启动一个新线程,这样您就可以在事件发生时立即捕获所有事件。请记住,在您的代码中,由于您有一个while True,信号从未连接到函数,您应该按照相反的顺序定义它们。在

下面是一个基于您的代码的工作示例:

import threading
from blinker import signal
from time import sleep

custom_signal = signal(name='custom')

@custom_signal.connect
def slot(sender):
    def say_hello():
        print("1")
        sleep(10)
        print("2")

    threading.Thread(target=say_hello).start()

while True:
    value = int(input('Press 1 to continue: '))
    if value == 1:
        custom_signal.send()
    else:
        break

相关问题 更多 >