Python底层API目录
本页列出所有底层asyncio API。
获取事件循环¶
asyncio.get_running_loop()
| 获取当前运行的事件循环 首选 函数。 |
asyncio.get_event_loop()
| 获得一个事件循环实例(当前或通过策略)。 |
asyncio.set_event_loop()
| 通过当前策略将事件循环设置当前事件循环。 |
asyncio.new_event_loop()
| 创建一个新的事件循环。 |
例子
事件循环方法集¶
查阅 事件循环方法 相关的主要文档段落 。
生命周期
loop.run_until_complete()
| 运行一个期程/任务/可等待对象直到完成。 |
loop.run_forever()
| 一直运行事件循环。 |
loop.stop()
| 停止事件循环。 |
loop.close()
| 关闭事件循环。 |
loop.is_running()
| 返回 True , 如果事件循环正在运行。 |
loop.is_closed()
| 返回 True ,如果事件循环已经被关闭 。 |
await loop.shutdown_asyncgens()
| 关闭异步生成器。 |
调试
loop.set_debug()
| 开启或禁用调试模式。 |
loop.get_debug()
| 获取当前测试模式。 |
调度回调函数
loop.call_soon()
| 尽快调用回调。 |
loop.call_soon_threadsafe()
| loop.call_soon() 方法线程安全的变体。
|
loop.call_later()
| 在给定时间 之后 调用回调函数。 |
loop.call_at()
| 在 指定 时间调用回调函数。 |
线程/进程池
await loop.run_in_executor()
| 在 concurrent.futures 执行器中运行一个独占CPU或其它阻塞函数。 |
loop.set_default_executor()
| 设置 loop.run_in_executor() 默认执行器。 |
任务与期程
loop.create_future()
| 创建一个 Future 对象。 |
loop.create_task()
| 将协程当作 Task 一样调度。 |
loop.set_task_factory()
| 设置 loop.create_task() 使用的工厂,它将用来创建 Tasks 。 |
loop.get_task_factory()
| 获取 loop.create_task() 使用的工厂,它用来创建 Tasks 。 |
DNS
await loop.getaddrinfo()
| 异步版的 socket.getaddrinfo() 。 |
await loop.getnameinfo()
| 异步版的 socket.getnameinfo() 。 |
网络和IPC
await loop.create_connection()
| 打开一个TCP链接。 |
await loop.create_server()
| 创建一个TCP服务。 |
await loop.create_unix_connection()
| 打开一个Unix socket连接。 |
await loop.create_unix_server()
| 创建一个Unix socket服务。 |
await loop.connect_accepted_socket()
| 将 socket 包装成 (transport,protocol) 对。 |
await loop.create_datagram_endpoint()
| 打开一个数据报(UDP)连接。 |
await loop.sendfile()
| 通过传输通道发送一个文件。 |
await loop.start_tls()
| 将一个已建立的链接升级到TLS。 |
await loop.connect_read_pipe()
| 将管道读取端包装成 (transport,protocol) 对。 |
await loop.connect_write_pipe()
| 将管道写入端包装成 (transport,protocol) 对。 |
套接字
await loop.sock_recv()
| 从 socket 接收数据。 |
await loop.sock_recv_into()
| 从 socket 接收数据到一个缓冲区中。 |
await loop.sock_sendall()
| 发送数据到 socket 。 |
await loop.sock_connect()
| 链接 await loop.sock_connect() 。 |
await loop.sock_accept()
| 接受一个 socket 链接。 |
await loop.sock_sendfile()
| 利用 socket 发送一个文件。 |
loop.add_reader()
| 开始对一个文件描述符的可读性的监视。 |
loop.remove_reader()
| 停止对一个文件描述符的可读性的监视。 |
loop.add_writer()
| 开始对一个文件描述符的可写性的监视。 |
loop.remove_writer()
| 停止对一个文件描述符的可写性的监视。 |
Unix信号
loop.add_signal_handler()
| 给 signal 添加一个处理回调函数。 |
loop.remove_signal_handler()
| 删除 signal 的处理回调函数。 |
子进程集
loop.subprocess_exec()
| 衍生一个子进程 |
loop.subprocess_shell()
| 从终端命令衍生一个子进程。 |
错误处理
loop.call_exception_handler()
| 调用异常处理器。 |
loop.set_exception_handler()
| 设置一个新的异常处理器。 |
loop.get_exception_handler()
| 获取当前异常处理器。 |
loop.default_exception_handler()
| 默认异常处理器实现。 |
例子
使用 asyncio.get_event_loop() 和 loop.run_forever().
使用 loop.call_later().
使用 loop.create_connection()
实现 echo客户端.
使用 loop.create_connection()
去 链接socket.
使用add_reader()监听FD(文件描述符)的读取事件.
使用loop.add_signal_handler().
使用loop.add_signal_handler()。
传输¶
所有传输都实现以下方法:
transport.close()
| 关闭传输。 |
transport.is_closing()
| 返回 True ,如果传输正在关闭或已经关闭。 |
transport.get_extra_info()
| 请求传输的相关信息。 |
transport.set_protocol()
| 设置一个新协议。 |
transport.get_protocol()
| 返回当前协议。 |
传输可以接收数据(TCP和Unix链接,管道等)。它通过 loop.create_connection()
, loop.create_unix_connection()
, loop.connect_read_pipe()
等方法返回。
读取传输
transport.is_reading()
| 返回 True ,如果传输正在接收。 |
transport.pause_reading()
| 暂停接收。 |
transport.resume_reading()
| 继续接收。 |
传输可以发送数据(TCP和Unix链接,管道等)。它通过 loop.create_connection()
, loop.create_unix_connection()
, loop.connect_write_pipe()
等方法返回。
写入传输
transport.write()
| 向传输写入数据。 |
transport.write()
| 向传输写入缓冲。 |
transport.can_write_eof()
| 返回 True ,如果传输支持发送 EOF。 |
transport.write_eof()
| 在冲洗已缓冲的数据后关闭传输和发送EOF。 |
transport.abort()
| 立即关闭传输。 |
transport.get_write_buffer_size()
| 返回写入流控制的高位标记位和低位标记位。 |
transport.set_write_buffer_limits()
| 设置新的写入流控制的高位标记位和低位标记位。 |
由 loop.create_datagram_endpoint()
返回的传输:
数据报传输
transport.sendto()
| 发送数据到远程链接端。 |
transport.abort()
| 立即关闭传输。 |
基于子进程的底层抽象传输,它由 loop.subprocess_exec()
和 loop.subprocess_shell()
返回:
子进程传输
transport.get_pid()
| 返回子进程的进程ID。 |
transport.get_pipe_transport()
| 返回请求通信管道 (stdin, stdout, 或 stderr)的传输。 |
transport.get_returncode()
| 返回子进程的返回代号。 |
transport.kill()
| 杀死子进程。 |
transport.send_signal()
| 发送一个信号到子进程。 |
transport.terminate()
| 停止子进程。 |
transport.close()
| 杀死子进程并关闭所有管道。 |
协议¶
协议类可以由下面 回调方法 实现:
callback connection_made()
| 链接建立时被调用。 |
callback connection_lost()
| 链接丢失或关闭时被调用。 |
callback pause_writing()
| 传输的缓冲区超过高位标记位时被调用。 |
callback resume_writing()
| 传输的缓冲区传送到低位标记位时被调用。 |
流协议 (TCP, Unix 套接字, 管道)
callback data_received()
| 接收到数据时被调用。 |
callback eof_received()
| 接收到EOF时被调用。 |
缓冲流协议
callback get_buffer()
| 调用后会分配新的接收缓冲区。 |
callback buffer_updated()
| 用接收的数据更新缓冲区时被调用。 |
callback eof_received()
| 接收到EOF时被调用。 |
数据报协议
callback datagram_received()
| 接收到数据报时被调用。 |
callback error_received()
| 前一个发送或接收操作引发 OSError 时被调用。 |
子进程协议
callback pipe_data_received()
| 子进程向 stdout 或 stderr 管道写入数据时被调用。 |
callback pipe_connection_lost()
| 与子进程通信的其中一个管道关闭时被调用。 |
callback process_exited()
| 子进程退出时被调用。 |
事件循环策略¶
策略是改变 asyncio.get_event_loop()
这类函数行为的一个底层机制。更多细节可以查阅 策略部分。
访问策略
asyncio.get_event_loop_policy()
| 返回当前进程域的策略。 |
asyncio.set_event_loop_policy()
| 设置一个新的进程域策略。 |
AbstractEventLoopPolicy
| 策略对象的基类。 |