我使用Python 2.6与串口上的设备通信。我想确保设备每10秒仍然有效。我发现这样做的最好方法是启动一个经常ping设备的线程(其他方法,稍后设计,将配置命令发送出串口,因此全局)。以下是我的代码灵感来自here。
当我进入“退出”时,ConnectionThread
似乎只丢失10秒计时器并持续发送PING消息。造成这种情况的原因是什么,我如何才能结束整个线程?
import serial
import threading
ser = 0
class ConnectionThread(threading.Thread):
def __init__(self, event, **kwargs):
threading.Thread.__init__(self)
self.stopped = event
for key, value in kwargs.items():
setattr(self, key, value)
def run(self):
while not self.stopped.wait(10):
ser.write("{0},{1}\r".format(self.name,"PING"))
def main():
global ser
commport = input("Enter COM port:")
try:
ser = serial.Serial(
port = 'COM{0}'.format(commport),
baudrate = 9600
)
except:
print "Unable to open com port!"
stopFlag = threading.Event()
thread = ConnectionThread(stopFlag)
thread.start()
while True:
n = raw_input("Enter input:")
if n == "quit":
stopFlag.set()
break
if __name__ == "__main__":
main()
答案 0 :(得分:1)
由于您使用的是Python 2.6,Event.wait()
始终会返回None
。您需要明确检查while循环中Event
的状态:
while not self.stopped.wait(10):
if self.stopped.isSet():
return
ser.write("{0},{1}\r".format(self.name,"PING"))