python 线程无法在后台启动
这是我用来控制树莓派上LED灯开、关和闪烁的类。我想在某个时间停止闪烁的线程……但是线程不会在后台运行……
类名是LED:
_GPIOPORT=None flagstop=0 flag=threading.Event() def __init__(self,GPIONUM): self._GPIOPORT=GPIONUM GPIO.setmode(GPIO.BOARD) GPIO.setwarnings(False) GPIO.setup(self._GPIOPORT, GPIO.OUT) self.flag.set() def TurnOn(self): self.flag.clear() print 'Turn On ...' GPIO.output(self._GPIOPORT,True) def TurnOff(self): self.flag.clear() print 'Turn Off ...' GPIO.output(self._GPIOPORT,False) def Blink(self,delay,e): print 'Thread Blink Create ...' t1=threading.Thread(self.BlinkThread(delay,e)) t1.start() print 'Thread Started' def BlinkThread(self,delaytime,event): print 'BlinkTrehad Start ....' while not event: GPIO.output(self._GPIOPORT,False) sleep(delaytime) GPIO.output(self._GPIOPORT,True) sleep(delaytime)
这是我用来使用这个类的模块:
import LED
from time import sleep
import threading
if __name__ == '__main__':
e=threading.Event()
e.set()
ledblue=LED.LED(11)
ledblue.TurnOn()
sleep(1)
ledblue.Blink(1,e)
ledblue.TurnOn()
控制台上从来没有打印出“线程已启动”,而且循环一直在运行。
1 个回答
0
你在创建线程的时候直接调用了BlinkThread(),而不是仅仅传递这个函数的引用和参数,让线程自己去启动这个函数。你需要把它改成这样:
def Blink(self,delay,e):
print 'Thread Blink Create ...'
t1=threading.Thread(target=self.BlinkThread, args=(delay,e))
t1.start()
print 'Thread Started'