使用闪光灯进行异步/多线程处理

时间:2017-08-17 19:54:15

标签: python multithreading python-2.7 asynchronous blinker

我有一个覆盆子pi,我用4键键盘连接。使用来自闪光灯的信号,我把它连接起来运行一些方法。

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

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

这样可以正常工作,但是当我第二次按下按钮时(按下前一个按钮的10秒钟内),当time.sleep(10)中的线程暂停时,它不会触发该方法。

如果方法仍然暂停(可能在另一个线程中),我怎么能让它再次触发该方法

1 个答案:

答案 0 :(得分:0)

这是一个老问题,但对其他人来说仍然有用。

每次发出信号时都可以启动一个新线程,这样一旦发生了所有事件,你就可以捕获它们。请记住,在您的代码中,由于您有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