python 线程无法在后台启动

0 投票
1 回答
880 浏览
提问于 2025-04-18 07:13

这是我用来控制树莓派上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'

撰写回答