在while循环中使用线程会导致LED闪烁问题

时间:2017-03-11 17:45:03

标签: python json multithreading led

我已经挂了几天的问题,现在。我花了几个小时搜索留言板,然后空了。

我有一个程序从API中提取数据,用JSON解析它,并将其显示在LCD屏幕上。当数据满足特定条件时,我希望LED灯闪烁。到目前为止我一直很成功。我遇到的问题是当一个线程被调用以从我的主while循环开始闪烁,并且主while循环重新启动时,似乎再次调用该线程。这导致我的LED在每次后续循环重启后开始表现得很古怪。有什么建议吗?

我尝试使用v.isAlive()== False“希望线程不会重启但这没有帮助。我只是希望线程在条件满足后启动一次然后继续闪烁LED直到条件不满足。由于我使用的是液晶显示屏,因此数据是连续循环的。

这是我程序的一个非常简化的片段:

def partCloudBlink():
while True:
    allLEDon()
    time.sleep(2.5)
    yellowLEDon()
    time.sleep(1)
    allLEDoff()

def partCloudBlink_start():
v = threading.Thread(target=partCloudBlink)
if v.isAlive() == False:
    v.daemon = True
    v.start()

RUNNING = True

try:
    while RUNNING:
        if weather in ("Partly Cloudy"):
            partCloudBlink_start()

        print "Current conditions: %s" % (conditions) #unrelated to the question, just program filler

except KeyboardInterrupt:
    RUNNING = False

非常感谢!

1 个答案:

答案 0 :(得分:0)

这是因为每次调用partCloudBlink_start时都会创建一个新的线程对象。 v.isAlive()始终为False,因为它是新主题。

您可以创建一个全局变量或类似的东西来存储线程对象,具体取决于您的代码结构。