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 with
statement.
-
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'
。