Python I/O密集型串行端口应用程序:从线程、基于队列的设计移植到异步(ala)

Python I/O密集型串行端口应用程序:从线程、基于队列的设计移植到异步(ala),python,multithreading,serial-port,twisted,Python,Multithreading,Serial Port,Twisted,因此,我一直在为一个客户机开发一个应用程序,该客户机通过串行(RS-232)“主机”与无线设备通信。我目前使用线程编写了应用程序的核心(如下)。我在python上注意到,一致的意见似乎是不使用线程,而是使用Twisted的异步通信能力 我还没有找到任何使用twisted进行串行端口异步I/O通信的好例子。然而,我发现(感谢nosklo),我目前正在研究,但是,它使用套接字而不是串行通信(但是异步概念肯定解释得很好) 我将如何使用线程、队列将此应用程序移植到Twisted?有什么优点/缺点吗(我注

因此,我一直在为一个客户机开发一个应用程序,该客户机通过串行(RS-232)“主机”与无线设备通信。我目前使用线程编写了应用程序的核心(如下)。我在python上注意到,一致的意见似乎是不使用线程,而是使用Twisted的异步通信能力

我还没有找到任何使用twisted进行串行端口异步I/O通信的好例子。然而,我发现(感谢nosklo),我目前正在研究,但是,它使用套接字而不是串行通信(但是异步概念肯定解释得很好)

我将如何使用线程、队列将此应用程序移植到Twisted?有什么优点/缺点吗(我注意到,有时,如果线程挂起,它会阻塞系统)

代码(msg\u poller.py)

在线程/队列方法和使用twisted的方法之间编写直接的一对一映射程序是非常困难的(如果不是不可能的话)

我建议,了解twisted及其反应器的使用方式,包括协议和特定于协议的方法。可以这样想,当您使用延迟使用twisted时,所有使用线程和队列显式编码的异步内容都将免费提供给您

twisted似乎使用SerialPort传输类在其反应器上支持SerialPort,基本结构似乎是这样的

from twisted.internet import reactor
from twisted.internet.serialport import SerialPort

SerialPort(YourProtocolClass(), Port, reactor, baudrate=baudrate))
reactor.run() 

在您的ProtocolClass()中,您将处理特定于串行端口通信需求的各种事件。doc/core/examples目录包含gpsfix.py和mouse.py等示例。

很抱歉,我花了这么长时间才接受这一点……我一直在研究twisted等。再次感谢您的回复。
from twisted.internet import reactor
from twisted.internet.serialport import SerialPort

SerialPort(YourProtocolClass(), Port, reactor, baudrate=baudrate))
reactor.run()