Python线程在设置停止标志时持续执行
我正在使用Python 2.6通过串口与一个设备进行通信。我想每10秒确认一下设备是否还在工作。我找到的最好方法是启动一个线程,定期向设备发送“检查”信号(之后还会有其他方法发送配置命令,所以需要用到全局变量)。下面是我根据这个链接写的代码。
当我输入“quit”时,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()
1 个回答
1
因为你在使用Python 2.6,所以Event.wait()
总是返回None
。你需要在你的循环里明确检查一下Event
的状态:
while not self.stopped.wait(10):
if self.stopped.isSet():
return
ser.write("{0},{1}\r".format(self.name,"PING"))