python退出循环快捷_通过webiopi退出python中的连续循环

您处于单线程应用程序中。。这意味着,一旦您输入idleLoop(),计算机(或者至少是您的程序)就不能执行任何其他操作,包括处理您的web请求以退出空闲循环,因为它一直在闪烁LED灯并处于休眠状态。在

处理这个问题的方法是让启动和停止LED的函数只需设置一个全局变量,然后退出。。例如

blink_enabled = True或{}。在

比如:blink_enabled = False

def loop():

webiopi.sleep(1)

if blink_enabled:

blink_once()

def blink_once():

GPIO.digitalWrite(LIGHT1, GPIO.HIGH)

time.sleep(0.05)

GPIO.digitalWrite(LIGHT2, GPIO.HIGH)

GPIO.digitalWrite(LIGHT1, GPIO.LOW)

time.sleep(0.05)

GPIO.digitalWrite(LIGHT3, GPIO.HIGH)

GPIO.digitalWrite(LIGHT2, GPIO.LOW)

time.sleep(0.05)

@webiopi.macro

def stopLoop():

blink_enabled = False

@webiopi.macro

def idleLoop():

blink_enabled = True

这将允许在每次闪烁之间处理其他任务,如处理web请求。在每一次闪烁中,其他事情的处理都会被阻止一点点。。这使得这段代码不太理想。。但它为你指明了正确的方向。在一个多任务的环境中,你必须尽快完成这个任务。如果你不这样做,其他一切都会等待。在

从代码的外观来看,loop()似乎在循环,宏函数彼此独立执行。。但事实并非如此。它们相互之间来回传递控制权,每次只有一个运行。在

理想的方法是不使用时间。睡觉(),但要记下(在变量中)上次更改LED的时间。。并在loop()中检查,以查看经过了多少时间。。如果时间不够,什么也不做,下次再检查。过了足够的时间后,将LED切换到下一个状态并重置计时器。这是解决这类问题的经典方法。。称为“状态机”方法。在

当您调用sleep()时,一切都会停止,所以您需要避免这种情况。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值