为什么Python除了导致速度减慢之外都会尝试

  • 本文关键字:速度 Python python evdev
  • 更新时间 :
  • 英文 :


我在python3中为RaspberryPi编写了一个简单的应用程序。我的rpi有一个新的安装,在开始开发之前我已经完成了所有的更新。该应用程序是一个显示在LED矩阵上的体育记分板,并利用蓝牙游戏控制器和evdev模块进行输入控制。

蓝牙输入工作得很好,响应率100%,只是如果断开连接,应用程序将崩溃,因为它无法再访问/dev/input/event0(这是游戏板输入(。

我在代码中添加了try-Exception,它解决了崩溃问题,并允许在游戏板断开连接的情况下继续执行代码。这带来了两个我需要帮助的新问题。

  1. 大约10%的游戏板输入现在没有注册。有时一个按钮必须按下两次才能注册。

  2. 控制台中的Ctl-C不会停止代码执行。我将在控制台中获得以下内容:

    键盘中断:^CException在中被忽略:<函数InputDevicedel在0x757d6588>

如果我删除除游戏板读取之外的尝试,它将正常工作,直到游戏板断开连接。这是有问题的代码。

while True:
#Gamepad read
try:
dev = InputDevice('/dev/input/event0')    
gen = dev.read()
except Exception:
pass
#Gamepad functions
try:
for ev in gen:
if ev.type == ecodes.EV_KEY:
if ev.value == 1:
if ev.code == 23:
if home == 0:
pass
else:
home-=1 
elif ev.code == 35:
home+=1 
elif ev.code == 34:
away+=1 
elif ev.code == 36:
if away==0:
pass
else:
away-=1
elif ev.code == 49:
stopwatch.reset()
start_clock == 300
elif ev.code == 32:
start_clock+=1
elif ev.code == 46:
start_clock-=1
elif ev.code == 33:
start_clock+=60
elif ev.code == 18:
start_clock-=60        
elif ev.code == 24:
away=00
home=00
elif ev.code == 37:
_draw_ani()
elif ev.code == 50:
if stopwatch.running:
stopwatch.stop()
else:
stopwatch.start()   
except IOError:
pass

通常,使用try/except进行检查的成本很高,特别是在引发异常时。这个问题是一个很好的参考,可以在那件事上帮助你。

我认为使用if/else条件会减少负载。为此,您应该首先检测引发异常的原因(可以使用except Exception as error和分析error对象(。然后您可以使用if/else检查条件。

对于您的代码,直接使用with而不是openingreading,如下所示:

with InputDevice('/dev/input/event0').read() as gen:
# do stuff with gen obj

这样就不需要手动关闭obj。现在,代码中的一个问题是在设备打开时尝试read

相关内容

  • 没有找到相关文章

最新更新