Python线程在设置停止标志时连续执行

2024-06-16 12:14:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Python2.6与串行端口上的设备通信。我要确保设备每10秒仍处于活动状态。我发现最好的方法是启动一个线程,每隔一段时间ping设备一次(其他方法,稍后设计,将发送配置命令到串行端口,因此是全局的)。下面是我的代码灵感来自here。在

当我输入“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()

Tags: 方法端口importselfinputmainportdef
1条回答
网友
1楼 · 发布于 2024-06-16 12:14:40

因为您使用的是python2.6,Event.wait()总是返回None。{while}需要检查cdy}内部的状态:

while not self.stopped.wait(10):
    if self.stopped.isSet():
        return
    ser.write("{0},{1}\r".format(self.name,"PING"))

相关问题 更多 >