java異步編程之一文看完其異步函數(shù)表
1 低層級(jí) asyncio 索引
低層級(jí) API 索引¶ 列出所有低層級(jí)的 asyncio API。
1.1 獲取事件循環(huán)
獲取當(dāng)前運(yùn)行的事件循環(huán) 首選 函數(shù):
asyncio.get_running_loop()
獲得一個(gè)事件循環(huán)實(shí)例(當(dāng)前或通過(guò)策略):
asyncio.get_event_loop()
通過(guò)當(dāng)前策略將事件循環(huán)設(shè)置當(dāng)前事件循環(huán):
asyncio.set_event_loop()
創(chuàng)建一個(gè)新的事件循環(huán):
asyncio.new_event_loop()
例子:
使用asyncio.get_running_loop()
1.2 事件循環(huán)方法集
- 查閱
事件循環(huán)方法 相關(guān)的主要文檔段落 。生命周期
運(yùn)行一個(gè)期程/任務(wù)/可等待對(duì)象直到完成:
loop.run_until_complete()
一直運(yùn)行事件循環(huán):
loop.run_forever()
停止事件循環(huán):
loop.stop()
關(guān)閉事件循環(huán):
loop.close()
返回 True , 如果事件循環(huán)正在運(yùn)行:
loop.is_running()
返回 True ,如果事件循環(huán)已經(jīng)被關(guān)閉:
loop.is_closed()
關(guān)閉異步生成器:
await loop.shutdown_asyncgens()
- 調(diào)試:
開啟或禁用調(diào)試模式:
loop.set_debug()
獲取當(dāng)前測(cè)試模式:
loop.get_debug()
調(diào)度回調(diào)函數(shù):
loop.call_soon()
盡快調(diào)用回調(diào):
loop.call_soon_threadsafe()
方法線程安全的變體:
loop.call_soon()
在給定時(shí)間 之后 調(diào)用回調(diào)函數(shù):
loop.call_later()
在 指定 時(shí)間調(diào)用回調(diào)函數(shù):
loop.call_at()
- 線程/進(jìn)程池
在 concurrent.futures 執(zhí)行器中運(yùn)行一個(gè)獨(dú)占CPU或其它阻塞函數(shù):
await loop.run_in_executor()
設(shè)置 loop.run_in_executor() 默認(rèn)執(zhí)行器:
loop.set_default_executor()
- 任務(wù)與期程
創(chuàng)建一個(gè) Future 對(duì)象:
loop.create_future()
將協(xié)程當(dāng)作 Task 一樣調(diào)度:
loop.create_task()
設(shè)置 loop.create_task() 使用的工廠,它將用來(lái)創(chuàng)建 Tasks:
loop.set_task_factory()
獲取 loop.create_task() 使用的工廠,它用來(lái)創(chuàng)建 Tasks:
loop.get_task_factory()
異步版的 socket.getaddrinfo():
await loop.getaddrinfo()
異步版的 socket.getnameinfo():
await loop.getnameinfo()
- 網(wǎng)絡(luò)和IPC
打開一個(gè)TCP鏈接:
await loop.create_connection()
創(chuàng)建一個(gè)TCP服務(wù):
await loop.create_server()
打開一個(gè)Unix socket連接:
await loop.create_unix_connection()
創(chuàng)建一個(gè)Unix socket服務(wù):
await loop.create_unix_server()
將 socket 包裝成 (transport, protocol) 對(duì):
await loop.connect_accepted_socket()
打開一個(gè)數(shù)據(jù)報(bào)(UDP)連接:
await loop.create_datagram_endpoint()
通過(guò)傳輸通道發(fā)送一個(gè)文件:
await loop.sendfile()
將一個(gè)已建立的鏈接升級(jí)到TLS:
await loop.start_tls()
將管道讀取端包裝成 (transport, protocol) 對(duì):
await loop.connect_read_pipe()
將管道寫入端包裝成 (transport, protocol) 對(duì):
await loop.connect_write_pipe()
- 套接字
從 socket 接收數(shù)據(jù):
await loop.sock_recv()
從 socket 接收數(shù)據(jù)到一個(gè)緩沖區(qū)中:
await loop.sock_recv_into()
發(fā)送數(shù)據(jù)到 socket :
await loop.sock_sendall()
鏈接 await loop.sock_connect() :
await loop.sock_connect()
接受一個(gè) socket 鏈接:
await loop.sock_accept()
利用 socket 發(fā)送一個(gè)文件:
await loop.sock_sendfile()
開始對(duì)一個(gè)文件描述符的可讀性的監(jiān)視:
loop.add_reader()
停止對(duì)一個(gè)文件描述符的可讀性的監(jiān)視:
loop.remove_reader()
開始對(duì)一個(gè)文件描述符的可寫性的監(jiān)視:
loop.add_writer()
停止對(duì)一個(gè)文件描述符的可寫性的監(jiān)視:
loop.remove_writer()
- Unix信號(hào)
給 signal 添加一個(gè)處理回調(diào)函數(shù):
loop.add_signal_handler()
刪除 signal 的處理回調(diào)函數(shù):
loop.remove_signal_handler()
- 子進(jìn)程集
衍生一個(gè)子進(jìn)程:
loop.subprocess_exec()
從終端命令衍生一個(gè)子進(jìn)程:
loop.subprocess_shell()
- 錯(cuò)誤處理
調(diào)用異常處理器:
loop.call_exception_handler()
設(shè)置一個(gè)新的異常處理器:
loop.set_exception_handler()
獲取當(dāng)前異常處理器:
loop.get_exception_handler()
默認(rèn)異常處理器實(shí)現(xiàn):
loop.default_exception_handler()
例子
使用 asyncio.get_event_loop() 和 loop.run_forever().
使用 loop.call_later().
使用 loop.create_connection() 實(shí)現(xiàn) echo客戶端.
使用 loop.create_connection() 去 鏈接socket.
使用add_reader()監(jiān)聽FD(文件描述符)的讀取事件.
使用loop.add_signal_handler().
使用loop.add_signal_handler()。
1.3 傳輸
所有傳輸都實(shí)現(xiàn)以下方法:
transport.close()
關(guān)閉傳輸。
transport.is_closing()
返回 True ,如果傳輸正在關(guān)閉或已經(jīng)關(guān)閉。
transport.get_extra_info()
請(qǐng)求傳輸?shù)南嚓P(guān)信息。
transport.set_protocol()
設(shè)置一個(gè)新協(xié)議。
transport.get_protocol()
返回當(dāng)前協(xié)議。
傳輸可以接收數(shù)據(jù)(TCP和Unix鏈接,管道等)。它通過(guò) loop.create_connection(), loop.create_unix_connection(), loop.connect_read_pipe() 等方法返回。
1.3.1 讀取傳輸
返回 True ,如果傳輸正在接收:
transport.is_reading()
暫停接收:
transport.pause_reading()
繼續(xù)接收:
transport.resume_reading()
傳輸可以發(fā)送數(shù)據(jù)(TCP和Unix鏈接,管道等)。它通過(guò) loop.create_connection(), loop.create_unix_connection(), loop.connect_write_pipe() 等方法返回。
1.3.2 寫入傳輸
向傳輸寫入數(shù)據(jù):
transport.write()
向傳輸寫入緩沖:
transport.write()
返回 True ,如果傳輸支持發(fā)送 EOF:
transport.can_write_eof()
在沖洗已緩沖的數(shù)據(jù)后關(guān)閉傳輸和發(fā)送EOF:
transport.write_eof()
立即關(guān)閉傳輸:
transport.abort()
返回寫入流控制的高位標(biāo)記位和低位標(biāo)記位:
transport.get_write_buffer_size()
設(shè)置新的寫入流控制的高位標(biāo)記位和低位標(biāo)記位:
transport.set_write_buffer_limits()
由 loop.create_datagram_endpoint() 返回的傳輸:
1.3.3 數(shù)據(jù)報(bào)傳輸
發(fā)送數(shù)據(jù)到遠(yuǎn)程鏈接端:
transport.sendto()
立即關(guān)閉傳輸:
transport.abort()
基于子進(jìn)程的底層抽象傳輸,它由 loop.subprocess_exec() 和 loop.subprocess_shell() 返回:
1.3.4 子進(jìn)程傳輸
返回子進(jìn)程的進(jìn)程ID:
transport.get_pid()
返回請(qǐng)求通信管道 (stdin, stdout, 或 stderr)的傳輸:
transport.get_pipe_transport()
返回子進(jìn)程的返回代號(hào):
transport.get_returncode()
殺死子進(jìn)程:
transport.kill()
發(fā)送一個(gè)信號(hào)到子進(jìn)程:
transport.send_signal()
停止子進(jìn)程:
transport.terminate()
殺死子進(jìn)程并關(guān)閉所有管道:
transport.close()
1.3.5 協(xié)議
協(xié)議類可以由下面 回調(diào)方法 實(shí)現(xiàn):
連接建立時(shí)被調(diào)用:
callback connection_made()
連接丟失或關(guān)閉時(shí)將被調(diào)用:
callback connection_lost()
傳輸?shù)木彌_區(qū)超過(guò)高位標(biāo)記位時(shí)被調(diào)用:
callback pause_writing()
傳輸?shù)木彌_區(qū)傳送到低位標(biāo)記位時(shí)被調(diào)用:
callback resume_writing()
1.3.6 流協(xié)議 (TCP, Unix 套接字, 管道)
接收到數(shù)據(jù)時(shí)被調(diào)用:
callback data_received()
接收到EOF時(shí)被調(diào)用:
callback eof_received()
1.3.7 緩沖流協(xié)議
調(diào)用后會(huì)分配新的接收緩沖區(qū):
callback get_buffer()
用接收的數(shù)據(jù)更新緩沖區(qū)時(shí)被調(diào)用:
callback buffer_updated()
接收到EOF時(shí)被調(diào)用:
callback eof_received()
1.3.8 數(shù)據(jù)報(bào)協(xié)議
接收到數(shù)據(jù)報(bào)時(shí)被調(diào)用:
callback datagram_received()
前一個(gè)發(fā)送或接收操作引發(fā) OSError 時(shí)被調(diào)用:
callback error_received()
1.3.9 子進(jìn)程協(xié)議
子進(jìn)程向 stdout 或 stderr 管道寫入數(shù)據(jù)時(shí)被調(diào)用:
callback pipe_data_received()
與子進(jìn)程通信的其中一個(gè)管道關(guān)閉時(shí)被調(diào)用:
callback pipe_connection_lost()
子進(jìn)程退出時(shí)被調(diào)用:
callback process_exited()
事件循環(huán)策略
策略是改變 asyncio.get_event_loop() 這類函數(shù)行為的一個(gè)底層機(jī)制。更多細(xì)節(jié)可以查閱 策略部分。
訪問(wèn)策略
asyncio.get_event_loop_policy()
返回當(dāng)前進(jìn)程域的策略。
asyncio.set_event_loop_policy()
設(shè)置一個(gè)新的進(jìn)程域策略。
AbstractEventLoopPolicy
策略對(duì)象的基類。
2 高層 API索引
列舉了所有能用于 async/wait 的高層級(jí)asyncio API 集。
2.1 任務(wù)
運(yùn)行異步程序,創(chuàng)建Task對(duì)象,等待多件事運(yùn)行超時(shí)的公共集。
run()
創(chuàng)建事件循環(huán),運(yùn)行一個(gè)協(xié)程,關(guān)閉事件循環(huán)。
create_task()
啟動(dòng)一個(gè)asyncio的Task對(duì)象。
await sleep()
休眠幾秒。
await gather()
并發(fā)執(zhí)行所有事件的調(diào)度和等待。
await wait_for()
有超時(shí)控制的運(yùn)行。
await shield()
屏蔽取消操作
await wait()
完成情況的監(jiān)控器
current_task()
返回當(dāng)前Task對(duì)象
all_tasks()
返回事件循環(huán)中所有的task對(duì)象。
Task
Task對(duì)象
to_thread()
在不同的 OS 線程中異步地運(yùn)行一個(gè)函數(shù)。
run_coroutine_threadsafe()
從其他OS線程中調(diào)度一個(gè)協(xié)程。
for in as_completed()
用 for 循環(huán)監(jiān)控完成情況。
例子
使用 asyncio.gather() 并行運(yùn)行. 使用 asyncio.wait_for() 強(qiáng)制超時(shí).
撤銷協(xié)程.
asyncio.sleep() 的用法.
請(qǐng)主要參閱 協(xié)程與任務(wù)文檔.
2 隊(duì)列集
隊(duì)列集被用于多個(gè)異步Task對(duì)象的運(yùn)行調(diào)度,實(shí)現(xiàn)連接池以及發(fā)布/訂閱模式。
先進(jìn)先出隊(duì)列
Queue
優(yōu)先級(jí)隊(duì)列:
PriorityQueue
后進(jìn)先出隊(duì)列:
LifoQueue
使用 asyncio.Queue 在多個(gè)并發(fā)任務(wù)間分配工作量.
2.1 子進(jìn)程集
用于生成子進(jìn)程和運(yùn)行shell命令的工具包。
創(chuàng)建一個(gè)子進(jìn)程:
await create_subprocess_exec()
運(yùn)行一個(gè)shell命令:
await create_subprocess_shell()
比如使用 它執(zhí)行一個(gè)shell命令. 請(qǐng)參閱 子進(jìn)程 APIs 相關(guān)文檔.
3 同步
能被用于Task對(duì)象集的,類似線程的同步基元組件。
互斥鎖:
Lock
事件對(duì)象:
Event
條件對(duì)象:
Condition
信號(hào)量:
Semaphore
有界的信號(hào)量:
BoundedSemaphore
小結(jié)
使用異步庫(kù)的例子
asyncio.Event 的用法.
請(qǐng)參閱asyncio文檔 synchronization primitives.
異常
asyncio.TimeoutError
類似 wait_for() 等函數(shù)在超時(shí)時(shí)候被引發(fā)。請(qǐng)注意 asyncio.TimeoutError 與內(nèi)建異常 TimeoutError 無(wú)關(guān)。
asyncio.CancelledError
當(dāng)一個(gè)Task對(duì)象被取消的時(shí)候被引發(fā)。請(qǐng)參閱 Task.cancel()。 在取消請(qǐng)求發(fā)生的運(yùn)行代碼中如何處理CancelledError異常.
請(qǐng)參閱完整的 asyncio 專用異常 列表.
以上就是java異步編程之一文看完其異步函數(shù)表的詳細(xì)內(nèi)容,更多關(guān)于java異步函數(shù)表的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Spring Boot 2 整合 QuartJob 實(shí)現(xiàn)定時(shí)器實(shí)時(shí)管理功能
Quartz是一個(gè)完全由java編寫的開源作業(yè)調(diào)度框架,形式簡(jiǎn)易,功能強(qiáng)大。接下來(lái)通過(guò)本文給大家分享Spring Boot 2 整合 QuartJob 實(shí)現(xiàn)定時(shí)器實(shí)時(shí)管理功能,感興趣的朋友一起看看吧2019-11-11
Java中實(shí)現(xiàn)訂單超時(shí)自動(dòng)取消功能(最新推薦)
本文介紹了Java中實(shí)現(xiàn)訂單超時(shí)自動(dòng)取消功能的幾種方法,包括定時(shí)任務(wù)、JDK延遲隊(duì)列、Redis過(guò)期監(jiān)聽、Redisson分布式延遲隊(duì)列、RocketMQ延遲消息和RabbitMQ死信隊(duì)列,每種方法都有其優(yōu)缺點(diǎn),可以根據(jù)具體需求選擇合適的方法,感興趣的朋友一起看看吧2025-02-02
Spring測(cè)試基本的控制器實(shí)戰(zhàn)示例
這篇文章主要為大家介紹了Spring測(cè)試基本的控制器實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
深入理解spring boot異步調(diào)用方式@Async
Spring為任務(wù)調(diào)度與異步方法執(zhí)行提供了注解支持。通過(guò)在方法上設(shè)置@Async注解,可使得方法被異步調(diào)用。下面這篇文章主要給大家介紹了關(guān)于spring boot異步調(diào)用方式@Async的相關(guān)資料,需要的朋友可以參考下。2017-07-07
springBoot項(xiàng)目如何實(shí)現(xiàn)啟動(dòng)多個(gè)實(shí)例
這篇文章主要介紹了springBoot項(xiàng)目如何實(shí)現(xiàn)啟動(dòng)多個(gè)實(shí)例的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08

