开发者

java异步编程之一文看完其异步函数表

开发者 https://www.devze.com 2023-01-27 10:20 出处:网络 作者: 楽码
目录1 低层级 asyncio 索引1.1 获取事件循环1.2 事件循环方法集1.3 传输1.3.1 读取传输1.3.2 写入传输1.3.3 数据报传输1.3.4 子进程传输1.3.5 协议1.3.6 流协议 (TCP, Unix 套接字, 管道)1.3.7 缓冲流协议1.3.8 数据
目录
  • 1 低层级 asyncio 索引
    • 1.1 获取事件循环
    • 1.2 事件循环方法集
    • 1.3 传输
      • 1.3.1 读取传输
      • 1.3.2 写入传输
      • 1.3.3 数据报传输
      • 1.3.4 子进程传输
      • 1.3.5 协议
      • 1.3.6 流协议 (TCP, Unix 套接字, 管道)
      • 1.3.7 缓冲流协议
      • 1.3.8 数据报协议
      • 1.3.9 子进程协议
    • 事件循环策略
    • 2 高层 API索引
      • 2.1 任务
        • 例子
      • 2 队列集
        • 2.1 子进程集
          • 3 同步
          • 小结

            1 低层级 asyncio 索引

            低层级android API 索引¶ 列出所有低层级的 asyncio API。

            1.1 获取事件循环

            获取当前运行的事件循环 首选 函数:

            asyncio.get_running_loop() 
            

            获得一个事件循环实例(当前或通过策略):

            asyncio.get_event_loop()
            

            通过当前策略将事件循环设置当前事件循环:

            asyncio.set_event_loop()
            

            创建一个新的事件循环:

            asyncio.new_event_loop()
            

            例子:

            使用asyncio.get_running_loop()

            1.2 事件循环方法集

            • 查阅

            事件循环方法 相关的主要文档段落 。生命周期

            运行一个期程/任务/可等待对象直到完成:

            loop.run_until_complete()
            

            一直运行事件循环:

            ljavascriptoop.run_forever()
            

            停止事件循环:

            loop.stop()
            

            关闭事件循环:

            loop.close()
            

            返回 True , 如果事件循环正在运行:

            loop.is_running()
            

            返回 True ,如果事件循环已经被关闭:

            loop.is_closed()
            

            关闭异步生成器:

            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()
            
            • 线程/进程池

            在 concurrent.futures 执行器中运行一个独占CPU或其它阻塞函数:

            await loop.run_in_executor()
            

            设置 loop.run_in_executor编程() 默认执行器:

            loop.set_default_executor()
            
            • 任务与期程

            创建一个 Future 对象:

            loop.create_future()
            

            将协程当作 Task 一样调度:

            loop.create_task()
            

            设置 loop.create_task() 使用的工厂,它将用来创建 Tasks:

            loop.set_task_factory()
            

            获取 loop.create_task() 使用的工厂,它用来创建 Tasks:

            loop.get_task_factory()
            

            异步版的 socket.getaddrinfo():

            await loop.getaddrinfo()
            

            异步版的 socket.getnameinfo():

            await loop.getnameinfo()
            
            • 网络和IPC

            打开一个TCP链接:

            await loop.create_connection()
            

            创建一个TCP服务:

            await loop.create_server()
            

            打开一个Unix socket连接:

            await loop.create_unix_connection()
            

            创建一个Unix socket服务:

            await loop.create_unix_server()
            

            将 socket 包装成 (transport, protocol) 对:

            await loop.connect_accepted_socket()
            

            打开一个数据报(UDP)连接:

            await loop.create_datagram_endpoint()
            

            通过传输通道发送一个文件:

            await loop.sendfile()
            

            将一个已建立的链接升级到TLS:

            await loop.start_tls()
            

            将管道读取端包装成 (transport, protocol) 对:

            await loop.connect_read_pipe()
            

            将管道写入端包装成 (transport, protocol) 对:

            await loop.connect_write_pipe()
            
            • 套接字

            从 socket 接收数据:

            await loop.sock_recv()
            

            从 socket 接收数据到一个缓冲区中:

            await loop.sock_recv_into()
            

            发送数据到 socket :

            await loop.sock_sendall()
            

            链接 await loop.sock_connect() :

            await loop.sock_connect()
            

            接受一个 socket 链接:

            await loop.sock_accept()
            

            利用 socket 发送一个文件:

            await loop.sock_sendfile()
            

            开始对一个文件描述符的可读性的监视:

            loop.add_reader()
            

            停止对一个文件描述符的可读性的监视:

            loop.remove_reader()
            

            开始对一个文件描述符的可写性的监视:

            loop.add_writer()
            

            停止对一个文件描述符的可写性的监视:

            loop.remove_writer()
            

            给 signal 添加一个处理回调函数:

            loop.add_signal_handler()
            

            删除 signal 的处理回调函数:

            loop.remove_signal_handler()
            
            • 子进程集

            衍生一个子进程:

            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()。

            1.3 传输

            所有传输都实现以下方法:

            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() 等方法返回。

            1.3.1 读取传输

            返回 True ,如果传输正在接收:

            transport.is_reading()
            

            暂停接收:

            transport.pause_reading()
            

            继续接收:

            transport.resume_reading()
            

            传输可以发送数据(TCP和Unix链接,管道等)。它通过 loop.create_connection(), loop.create_unix_connection(), loop.connect_write_pipe() 等方法返回。

            1.3.2 写入传输

            向传输写入数据:

            transport.write()
            

            向传输写入缓冲:

            transport.write()
            

            返回 True ,如果传输支持发送 EOF:

            transport.can_write_eof()
            

            在冲洗已缓冲的数据后关闭传输和发送EOF:

            transport.write_eof()
            

            立即关闭传输:

            transport.abort()
            

            返回写入流控制的高位标记位和低位标记位:

            transport.get_write_buffer_size()
            

            设置新的写入流控制的高位标记位和低位标记位:

            transport.set_write_buffer_limits()
            

            由 loop.create_datagram_endpoint() 返回的传输:

            1.3.3 数据报传输

            发送数据到远程链接端:

            transport.sendto()
            

            立即关闭传输:

            transport.abort()
            

            基于子进程的底层抽象传输,它由 loop.subprocess_exec() 和 loop.subprocess_shell() 返回:

            1.3.4 子进程传输

            返回子进程的进程ID:

            transport.get_pid()
            

            返回请求通信管道 (stdin, stdout, 或 stderr)的传输:

            transport.get_pipe_transport()
            

            返回子进程的返回代号:

            transport.get_returncode()
            

            杀死子进程:

            transport.kill()
            

            发送一个信号到子进程:

            transport.send_signal()
            

            停止子进程:

            transport.terminate()
            

            杀死子进程并关闭所有管道:

            transport.close()
            

            1.3.5 协议

            协议类可以由下面 回调方法 实现:

            连接建立时被调用:

            callback connection_made()
            

            连接丢失或关闭时将被调用:

            callback connection_lost()
            

            传输的缓冲区超过高位标记位时被调用:

            callback pause_writing()
            

            传输的缓冲区传送到低位标记位时被调用:

            callback resume_writing()
            

            1.3.6 流协议 (TCP, Unix 套接字, 管道)

            接收到数据时被调用:

            callback data_received()
            

            接收到EOF时被调用:

            callback eof_received()
            

            1.3.7 缓冲流协议

            调用后会分配新的接收缓冲区:

            callback get_buffer()
            

            用接收的数据更新缓冲区时被调用:

            callback buffer_updated()
            

            接收到EOF时被调用:

            callback eof_received()
            

            1.3.8 数据报协议

            接收到数据报时被调用:

            callback datagram_received()
            

            前一个发送或接收操作引发 OSError 时被调用:

            callback error_received()
            

            1.3.9 子进程协议

            子进程向 stdout 或 stderr 管道写入数据时被调用:

            callback pipe_data_received()
            

            与子进程通信的其中一个管道关闭时被调用:

            callback pipe_connection_lost()
            

            子进程退出时被调用:

            callback process_exited()
            

            事件循环策略

            策略是改变 asyncio.get_event_loop() 这类函数行为的一个底层机制。更多细节可以查阅 策略部分。

            访问策略

            asyncio.get_event_loop_policy()
            

            返回当前进程域的策略。

            asyncio.set_event_loop_policy()
            

            设置一个新的进程域策略。

            AbstractEventLoopPolicy
            

            策略对象的基类。

            2 高层 API索引

            列举了所有能用于 async/wait 的高层级asyncio API 集。

            2.1 任务

            运行异步程序,创建Task对象,等待多件事运行超时的公共集。

            run()
            

            创建事件循环,运行一个协程,关闭事件循环。

            create_task()
            

            启动一个asyncio的Task对象。

            await sleep()
            

            休眠几秒。

            await gather()
            

            并发执行所有事件的调度和等待。

            await wait_for()
            

            有超时控制的运行。

            await shield()
            

            屏蔽取消操作

            await wait()
            

            完成情况的监控器

            current_task()
            

            返回当前Task对象

            all_tasks()
            

            返回事件循环中所有的task对象。

            Task
            

            Task对象

            to_thread()
            

            在不同的 OS 线程中异步地运行一个函数。

            run_coroutine_threadsafe()
            

            从其他OS线程中调度一个协程。

            for in as_completed()
            

            用 for 循环监控完成情况。

            例子

            使用 asyncio.gather() 并行运行. 使用 asyncio.wait_for() 强制超时.

            撤销协程.

            	asyncio.sleep() 的用法.
            

            请主要参阅 协程与任务文档.

            2 队列集

            队列集被用于多个异步Task对象的运行调度,实现连接池以及发布/订阅模式。

            先进先出队列

            Queue
            

            优先级队列:

              PriorityQueue
            

            后进先出队列:

            LifoQueue
            

            使用 asyncio.Queue 在多个并发任务间分配工作量.

            2.1 子进程集

            用于生成子进程和运行shell命令的工具包。

            创建一个子进程:

            await create_subprocess_exec()
            

            运行一个shell命令:

            await create_subprocess_shell()
            

            比如使用 它执行一个shell命令. 请参阅编程客栈 子进程 APIs 相关文档.

            3 同步

            能被用于Task对象编程客栈集的,类似线程的同步基元组件。

            互斥锁:

            Lock
            

            事件对象:

            Event
            

            条件对象:

            Condition
            

            信号量:

            Semaphore
            

            有界的信号量:

            BoundedSemaphore
            

            小结

            使用异步库的例子

            asyncio.Event 的用法.

            请参阅asyncio文档 synchronization primitives.

            异常

            asyncio.TimeoutError
            

            类似 wait_for() 等函数在超时时候被引发。请注意 asyncio.TimeoutError 与内建异常 TimeoutError 无关。

            asyncio.CancelledError
            

            当一个Task对象被取消的时候被引发。请参阅 Task.cancel()。 在取消请求发生的运行代码中如何处理CancelledError异常.

            请参阅完整的 asyncio 专用异常 列表.

            本文代码例子

            以上就是Java异步编程之一文看完其异步函数表的详细内容,更多关于java异步函数表的资料请关注我们其它相关文章!

            0

            精彩评论

            暂无评论...
            验证码 换一张
            取 消

            关注公众号