调用twisted的win32eventreactor.Win32Reactor()方法“stop”不会停止reactor

时间:2014-11-07 09:02:49

标签: python multithreading twisted reactor

在串行通信中,我正在使用twisted的reactor = win32eventreactor.Win32Reactor()。 用于使用串口传输。

reactor正在另一个线程中运行(它是在反应堆的帮助下运行的串行通信线程)

在调用reactor.run()之前,我正在创建这样的SerialPort:

        try:
            SerialPort(protocol(self.reactor, self),
                                self.cfg.comport,
                                self.reactor,
                                baudrate=self.cfg.baudrate,
                                bytesize=bytesize,
                                parity=parity,
                                stopbits=STOPBITS_ONE,
                                xonxoff=0,
                                rtscts=0)
            self.connected = True
        except serial.SerialException, ex:
            self.log.error('Serial exception: {0}'.format(ex))
            self.connected = False

        except ValueError, ex:
            self.log.error('Serial exception: {0}'.format(ex))
            self.connected = False
        finally:
            self.comm_event.set()

关于创建发生错误。例如: 串行异常:无法打开端口'COM9':WindowsError(2,'系统找不到指定的文件。')

这没关系,应该是一个错误。有了这个错误,协议实例将没有传输(如果成功 - 它将有)。

在此之后,我正在调用reactor.run()。它也没问题,因为主线程将管理通信线程,并在出现错误(前面提到)时调用reactor.stop()。 但如果在调用reactor.run()之前发生此错误,则在此调用reactor.stop()(从MainThread调用)后不会停止反应器主循环。如果在调用reactor.run()之前发生NO错误,则reactor.stop()调用过程STOPS反应器。

如果传输创建出错,看起来像reactor忽略了这个reactor.stop()。

所以也许有人知道为什么?或者可能如何调试reactor.stop()程序来找出为什么reactor没有停止?

0 个答案:

没有答案