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

 更新时间:2023年01月26日 13:02:32   作者:楽码  
这篇文章主要为大家介绍了java异步编程之一文看完其异步函数表示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

1 低层级 asyncio 索引

低层级 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()

一直运行事件循环:

loop.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()
  • Unix信号

给 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异步函数表的资料请关注程序员之家其它相关文章!

相关文章

  • 详解 Java Maximum redirects (100) exceeded

    详解 Java Maximum redirects (100) exceeded

    这篇文章主要介绍了详解 Java Maximum redirects (100) exceeded的相关资料,需要的朋友可以参考下
    2017-05-05
  • Java?8中?Stream小知识小技巧方法梳理

    Java?8中?Stream小知识小技巧方法梳理

    这篇文章主要介绍了Java8中Stream小知识小技巧方法梳理,Stream流和迭代器一样,它只能够迭代一次。当它遍历完的时候,我们就称它已经消费完了。如果还想重新执行操作,那么就只能从原来的地方再获取一个流
    2022-09-09
  • AsyncHttpClient KeepAliveStrategy源码流程解读

    AsyncHttpClient KeepAliveStrategy源码流程解读

    这篇文章主要为大家介绍了AsyncHttpClient KeepAliveStrategy源码流程解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Spring零基础入门IOC

    Spring零基础入门IOC

    IoC就是比方说有一个类,我们想要调用类里面的方法(不是静态方法),就要创建该类的对象,使用对象调用方法来实现。但对于Spring来说,Spring创建对象的过程,不是在代码里面实现的,而是交给Spring来进行配置实现的
    2022-08-08
  • 详解Spring Boot Security工作流程

    详解Spring Boot Security工作流程

    Spring Security,这是一种基于 Spring AOP 和 Servlet 。这篇文章主要介绍了Spring Boot Security的相关知识,需要的朋友可以参考下
    2019-04-04
  • Java基于rest assured实现接口测试过程解析

    Java基于rest assured实现接口测试过程解析

    这篇文章主要介绍了Java基于rest assured实现接口测试过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Java 数据结构链表操作实现代码

    Java 数据结构链表操作实现代码

    这篇文章主要介绍了Java 数据结构链表操作的相关资料,并附实例代码,需要的朋友可以参考下
    2016-10-10
  • 一篇文章带你玩转go语言的接口

    一篇文章带你玩转go语言的接口

    这篇文章主要介绍了go语言的接口,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧,希望能够给你带来帮助
    2021-09-09
  • 解决springboot中配置过滤器以及可能出现的问题

    解决springboot中配置过滤器以及可能出现的问题

    这篇文章主要介绍了解决springboot中配置过滤器以及可能出现的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • 关于spring 扫描不到jar中class文件的原因分析及解决

    关于spring 扫描不到jar中class文件的原因分析及解决

    这篇文章主要介绍了关于spring 扫描不到jar中class文件的原因分析及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08

最新评论

?


http://www.vxiaotou.com