3

我有一个树莓派,我已经连接了一个 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).

我怎样才能让它在它仍然暂停时再次触发该方法(可能在另一个线程中)

4

1 回答 1

4

这是一个古老的问题,但它仍然可能对其他人有用。

您可以在每次发出信号时启动一个新线程,这样您就可以在所有事件发生时立即捕获它们。请记住,在您的代码中,由于您有一个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
于 2018-05-29T05:32:05.760 回答