uasyncio — 异步 I/O 调度器¶
该模块实现了相应 CPython 模块的 一个子集,如下所述。有关更多信息,请参阅原始 CPython 文档: asyncio
例子:
import uasyncio
async def blink(led, period_ms):
    while True:
        led.on()
        await uasyncio.sleep_ms(5)
        led.off()
        await uasyncio.sleep_ms(period_ms)
async def main(led1, led2):
    uasyncio.create_task(blink(led1, 700))
    uasyncio.create_task(blink(led2, 400))
    await uasyncio.sleep_ms(10_000)
# Running on a pyboard
from pyb import LED
uasyncio.run(main(LED(1), LED(2)))
# Running on a generic board
from machine import Pin
uasyncio.run(main(Pin(1), Pin(2)))
核心功能¶
- 
uasyncio.run(coro)¶
- 从给定的协程创建一个新任务并运行它直到完成。 - 返回coro返回的值。 
- 
uasyncio.sleep(t)¶
- 睡眠t秒(可以是浮点数)。 - 这是一个协程。 
- 
uasyncio.sleep_ms(t)¶
- 休眠 t毫秒。 - 这是一个协程,也是一个 MicroPython 扩展。 
附加功能¶
- 
uasyncio.wait_for(awaitable, timeout)¶
- 等待awaitable完成,但如果它需要更长的超时秒数,请取消它。如果awaitable不是任务,那么将从它创建一个任务。 - 如果发生超时,它会取消任务并引发 - asyncio.TimeoutError: 这应该被调用者捕获。- 返回awaitable的返回值。 - 这是一个协程。 
- 
uasyncio.gather(*awaitables, return_exceptions=False)¶
- 同时运行所有等待。任何不是任务的等待项都被提升为任务。 - 返回所有awaitables的返回值列表。 - 这是一个协程。 
班级任务¶
- 
class uasyncio.Task¶
- 这个对象将一个协程包装成一个正在运行的任务。可以使用等待任务,它会等待任务完成并返回任务的返回值。 - await task- 任务不应直接创建,而 - create_task应用于创建它们。
- 
Task.cancel()¶
- 通过向其中注入 a 来取消任务 - CancelledError。任务可能会也可能不会忽略此异常。
班级活动¶
- 
class uasyncio.Event¶
- 创建一个可用于同步任务的新事件。事件以清除状态开始。 
- 
Event.is_set()¶
- True如果设置了事件,则返回,- False否则返回。
- 
Event.set()¶
- 设置事件。任何等待事件的任务都将被安排运行。 
- 
Event.clear()¶
- 清除事件。 
- 
Event.wait()¶
- 等待事件被设置。如果事件已经设置,那么它会立即返回。 - 这是一个协程。 
类锁¶
- 
class uasyncio.Lock¶
- 创建一个可用于协调任务的新锁。锁从解锁状态开始。 - 除了以下方法之外,还可以在语句中使用锁。 - async withstatement.
- 
Lock.locked()¶
- True如果锁被锁定,则返回,否则返回- False。
- 
Lock.acquire()¶
- 等待锁处于解锁状态,然后以原子方式将其锁定。任何时候只有一个任务可以获取锁。 - 这是一个协程。 
- 
Lock.release()¶
- 释放锁。如果有任何任务正在等待锁定,则将安排队列中的下一个任务运行,并且锁定保持锁定状态。否则,没有任务在等待锁被解锁。 
TCP 流连接¶
- 
uasyncio.open_connection(host, port)¶
- 打开到给定主机和端口的 TCP 连接。该主机地址将使用来解决 - socket.getaddrinfo, 这是目前一个阻塞调用。- 返回一对流:一个读取器和一个写入器流。 - OSError如果无法解析主机或无法建立连接,则将引发特定于套接字的套接字。- 这是一个协程。 
- 
uasyncio.start_server(callback, host, port, backlog=5)¶
- 在给定的主机和端口上启动 TCP 服务器。该回调将传入的,接受的连接被调用,并通过2个参数:读写器流进行连接。 - 返回一个 - Server对象。- 这是一个协程。 
- 
class uasyncio.Stream¶
- 这表示 TCP 流连接。为了最大限度地减少代码此类将实现读者和作家,都 - StreamReader和- StreamWriter别名此类。
- 
Stream.get_extra_info(v)¶
- 获取有关流的额外信息,由v给出。v的有效值为: - peername.
- 
Stream.close()¶
- 关闭流。 
- 
Stream.wait_closed()¶
- 等待流关闭。 - 这是一个协程。 
- 
Stream.read(n)¶
- 最多读取n个字节并返回它们。 - 这是一个协程。 
- 
Stream.readinto(buf)¶
- 最多读取 n 个字节到buf 中,n 等于buf的长度。 - 返回读入buf的字节数。 - 这是一个协程,也是一个 MicroPython 扩展。 
- 
Stream.readline()¶
- 读取一行并返回。 - 这是一个协程。 
- 
Stream.write(buf)¶
- 累积的buf到输出缓冲区。数据仅在 - Stream.drain被调用时刷新 。建议- Stream.drain调用该函数后立即调用。
- 
Stream.drain()¶
- 将所有缓冲的输出数据排出(写入)到流中。 - 这是一个协程。 
- 
class uasyncio.Server¶
- 这表示从 返回的服务器类 - start_server。它可用于在退出时关闭服务器的语句。- async with
- 
Server.close()¶
- 关闭服务器。 
- 
Server.wait_closed()¶
- 等待服务器关闭。 - 这是一个协程。 
事件循环¶
- 
uasyncio.new_event_loop()¶
- 重置事件循环并返回它。 - 注意:由于 MicroPython 只有一个事件循环,这个函数只是重置循环的状态,它不会创建一个新的循环。 
- 
class uasyncio.Loop¶
- 这表示调度和运行任务的对象。无法创建,请 - get_event_loop改用。
- 
Loop.run_until_complete(awaitable)¶
- 运行给定的awaitable 直到它完成。如果awaitable不是一项任务,那么它将被提升为一项。 
- 
Loop.stop()¶
- 停止事件循环。 
- 
Loop.close()¶
- 关闭事件循环。 
- 
Loop.set_exception_handler(handler)¶
- 设置异常处理程序以在 Task 引发未捕获的异常时调用。该处理器应该接受两个参数: - (loop, context)。
- 
Loop.get_exception_handler()¶
- 获取当前异常处理程序。返回处理程序,或者 - None如果未设置自定义处理程序。
- 
Loop.default_exception_handler(context)¶
- 调用的默认异常处理程序。 
- 
Loop.call_exception_handler(context)¶
- 调用当前异常处理程序。参数上下文被传递并且是一个包含键的字典: - 'message',- 'exception',- 'future'。