您好,登錄后才能下訂單哦!
這篇文章主要介紹了java異步函數怎么使用的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇java異步函數怎么使用文章都會有所收獲,下面我們一起來看看吧。
低層級 API 索引¶ 列出所有低層級的 asyncio API。
獲取當前運行的事件循環 首選 函數:
asyncio.get_running_loop()
獲得一個事件循環實例(當前或通過策略):
asyncio.get_event_loop()
通過當前策略將事件循環設置當前事件循環:
asyncio.set_event_loop()
創建一個新的事件循環:
asyncio.new_event_loop()
例子:
使用asyncio.get_running_loop()
查閱
事件循環方法 相關的主要文檔段落 。生命周期
運行一個期程/任務/可等待對象直到完成:
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()。
所有傳輸都實現以下方法:
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() 等方法返回。
返回 True ,如果傳輸正在接收:
transport.is_reading()
暫停接收:
transport.pause_reading()
繼續接收:
transport.resume_reading()
傳輸可以發送數據(TCP和Unix鏈接,管道等)。它通過 loop.create_connection(), loop.create_unix_connection(), loop.connect_write_pipe() 等方法返回。
向傳輸寫入數據:
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() 返回的傳輸:
發送數據到遠程鏈接端:
transport.sendto()
立即關閉傳輸:
transport.abort()
基于子進程的底層抽象傳輸,它由 loop.subprocess_exec() 和 loop.subprocess_shell() 返回:
返回子進程的進程ID:
transport.get_pid()
返回請求通信管道 (stdin, stdout, 或 stderr)的傳輸:
transport.get_pipe_transport()
返回子進程的返回代號:
transport.get_returncode()
殺死子進程:
transport.kill()
發送一個信號到子進程:
transport.send_signal()
停止子進程:
transport.terminate()
殺死子進程并關閉所有管道:
transport.close()
協議類可以由下面 回調方法 實現:
連接建立時被調用:
callback connection_made()
連接丟失或關閉時將被調用:
callback connection_lost()
傳輸的緩沖區超過高位標記位時被調用:
callback pause_writing()
傳輸的緩沖區傳送到低位標記位時被調用:
callback resume_writing()
接收到數據時被調用:
callback data_received()
接收到EOF時被調用:
callback eof_received()
調用后會分配新的接收緩沖區:
callback get_buffer()
用接收的數據更新緩沖區時被調用:
callback buffer_updated()
接收到EOF時被調用:
callback eof_received()
接收到數據報時被調用:
callback datagram_received()
前一個發送或接收操作引發 OSError 時被調用:
callback error_received()
子進程向 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
策略對象的基類。
列舉了所有能用于 async/wait 的高層級asyncio API 集。
運行異步程序,創建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() 的用法.
隊列集被用于多個異步Task對象的運行調度,實現連接池以及發布/訂閱模式。
先進先出隊列
Queue
優先級隊列:
PriorityQueue
后進先出隊列:
LifoQueue
使用 asyncio.Queue 在多個并發任務間分配工作量.
用于生成子進程和運行shell命令的工具包。
創建一個子進程:
await create_subprocess_exec()
運行一個shell命令:
await create_subprocess_shell()
比如使用 它執行一個shell命令. 請參閱 子進程 APIs 相關文檔.
能被用于Task對象集的,類似線程的同步基元組件。
互斥鎖:
Lock
事件對象:
Event
條件對象:
Condition
信號量:
Semaphore
有界的信號量:
BoundedSemaphore
使用異步庫的例子
asyncio.Event 的用法.
異常
asyncio.TimeoutError
類似 wait_for() 等函數在超時時候被引發。請注意 asyncio.TimeoutError 與內建異常 TimeoutError 無關。
asyncio.CancelledError
當一個Task對象被取消的時候被引發。請參閱 Task.cancel()。 在取消請求發生的運行代碼中如何處理CancelledError異常。
關于“java異步函數怎么使用”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“java異步函數怎么使用”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。