在Python 3.5.1中,可以利用await/async,但使用它(据我所知)需要一个可等待对象。
可等待对象是一个定义了返回迭代器的__await__()
方法的对象。更多信息请点击此处。
但我找不到任何具有这种特性的示例,因为大多数示例都使用类似asyncio.sleep(x)的形式来模拟可等待对象。
我的最终目标是创建一个简单的websocket串行服务器,但我无法通过第一步。 这是我的(不工作的)代码。
import serial
import asyncio
connected = False
port = 'COM9'
#port = '/dev/ttyAMA0'
baud = 57600
timeout=1
class startser(object):
def __init__(self, port, baud):
self.port = port
self.baud = baud
def openconn(self):
self.ser = serial.Serial(port, baud)
async def readport(self):
#gooo= await (self.ser.in_waiting > 0)
read_byte = async self.ser.read(1).decode('ascii')
self.handle_data(read_byte)
print ("42")
def handle_data(self, data):
print(data)
serr=startser(port,baud)
serr.openconn()
loop = asyncio.get_event_loop()
#loop.run_forever(serr.readport())
loop.run_until_complete(serr.readport())
loop.close()
print ("finitto")
#with serial.Serial('COM9', 115200, timeout=1) as ser:
#x = ser.read() # read one byte
#s = ser.read(10) # read up to ten bytes (timeout)
#line = ser.readline() # read a '\n' terminated line`
serial.Serial()
不是可等待对象。最终,您需要创建可等待的 I/O 原语,以便知道如何推迟执行,直到数据可用。这可不是易如反掌的事情。我认为目前还没有串口可等待的方法。 - Martijn Pieters