Python asyncio並發編程

Python asyncio並發編程

《Python asyncio並發編程》是2023年清華大學出版社出版的圖書,作者是[英]馬修·福勒(Matthew Fowler)。

基本介紹

  • 中文名:Python asyncio並發編程
  • 作者:[英]馬修·福勒(Matthew Fowler)
  • 譯者:殷海英
  • 出版社:清華大學出版社
  • 出版時間:2023年1月1日
  • 定價:128 元
  • ISBN:9787302622833
內容簡介,圖書目錄,

內容簡介

標準Python程式很容易過載,從而出現慢如龜爬的情況。asyncio庫正是為了解決這些問題而構建的,它簡化了任務的劃分和調度。asyncio可無縫地同時處理多個操作,使應用程式疾如閃電,且具有擴展性。
《Python asyncio並發編程》在大量示例的引導下,介紹異步、並行和並發編程。將難理解的並發內容分解為簡明易懂的流程圖,使讀者可輕鬆了解任務的運行方式。在本書中,讀者將學習如何使用asyncio來突破Python的限制,從而加快Web伺服器和微服務的運行速度。讀者甚至可將asyncio與傳統的多處理技術結合起來,以大幅提升性能。
主要內容
● 通過aiohttp構建支持並發Web請求的Web API
● 同時運行海量SQL查詢
● 創建一個可並行處理數GB數據的map-reduce作業
● 在asyncio中使用執行緒來混合阻塞代碼和asyncio代碼

圖書目錄

第1 章 asyncio簡介 1
1.1 什麼是asyncio 2
1.2 什麼是I/O密集型和CPU密集型 3
1.3 了解並發、並行和多任務處理 4
1.3.1 並發 4
1.3.2 並行 5
1.3.3 並行與並發的區別 6
1.3.4 什麼是多任務 6
1.3.5 協同多任務處理的優勢 7
1.4 了解進程、執行緒、多執行緒和多處理 7
1.4.1 進程 7
1.4.2 執行緒 8
1.5 理解全局解釋器鎖 11
1.5.1 GIL會釋放嗎 15
1.5.2 asyncio和GIL 17
1.6 單執行緒並發 17
1.7 事件循環的工作原理 20
1.8 本章小結 22
第2 章 asyncio基礎 23
2.1 關於協程 23
2.1.1 使用async關鍵字創建協程 24
2.1.2 使用await關鍵字暫停執行 26
2.2 使用sleep引入長時間運行的協程 27
2.3 通過任務實現並行 30
2.3.1 創建任務 30
2.3.2 同時運行多個任務 31
2.4 取消任務和設定逾時 34
2.4.1 取消任務 34
2.4.2 設定逾時並使用wait_for
執行取消 36
2.5 任務、協程、future和awaitable 38
2.5.1 關於future 38
2.5.2 future、任務和協程之間的關係 40
2.6 使用裝飾器測量協程執行時間 41
2.7 協程和任務的陷阱 43
2.7.1 運行CPU密集型代碼 44
2.7.2 運行阻塞API 46
2.8 手動創建和訪問事件循環 47
2.8.1 手動創建事件循環 47
2.8.2 訪問事件循環 48
2.9 使用調試模式 49
2.9.1 使用asyncio.run 49
2.9.2 使用命令行參數 49
2.9.3 使用環境變數 50
2.10 本章小結 51
第3 章 第一個asyncio應用程式 53
3.1 使用阻塞套接字 54
3.2 使用telnet連線到伺服器 56
3.2.1 從套接字讀取和寫入數據 57
3.2.2 允許多個連線和阻塞的危險性 59
3.3 使用非阻塞套接字 61
3.4 使用選擇器模組構建套接字事件循環 65
3.5 使用asyncio事件循環的
回顯伺服器 68
3.5.1 套接字的事件循環協程 69
3.5.2 設計一個異步回顯伺服器 69
3.5.3 解決任務中的錯誤 72
3.6 正常關閉 74
3.6.1 監聽信號 74
3.6.2 等待掛起的任務完成 76
3.7 本章小結 79
第4 章 並發網路請求 81
4.1 aiohttp 82
4.2 異步上下文管理器 82
4.2.1 使用aiohttp發出Web請求 85
4.2.2 使用aiohttp設定逾時 87
4.3 並發運行任務及重新訪問 88
4.4 通過gather執行並發請求 91
4.5 在請求完成時立即處理 95
4.6 使用wait進行細粒度控制 99
4.6.1 等待所有任務完成 99
4.6.2 觀察異常 102
4.6.3 當任務完成時處理結果 104
4.6.4 處理逾時 107
4.6.5 為什麼要將所有內容都包裝在一個任務中 109
4.7 本章小結 110
第5 章 非阻塞資料庫驅動程式 111
5.1 關於asyncpg 111
5.2 連線Postgres資料庫 112
5.3 定義資料庫模式 113
5.4 使用asyncpg執行查詢 116
5.5 通過連線池實現並發查詢 119
5.5.1 將隨機sku插入products資料庫 119
5.5.2 創建連線池從而同時運行查詢 123
5.6 使用asyncpg管理事務 128
5.6.1 嵌套事務 130
5.6.2 手動管理事務 132
5.7 異步生成器和流式結果集 133
5.7.1 異步生成器介紹 134
5.7.2 使用帶有流游標的異步生成器 135
5.8 本章小結 139
第6 章 處理CPU密集型工作 141
6.1 介紹multiprocessing庫 142
6.2 使用進程池 144
6.3 進程池執行器與asyncio 146
6.3.1 進程池執行器 146
6.3.2 帶有異步事件循環的進程池執行器 148
6.4 使用asyncio解決MapReduce的問題 149
6.4.1 簡單的MapReduce示例 151
6.4.2 Google Books Ngram數據集 153
6.4.3 使用asyncio進行映射和歸約 154
6.5 共享數據和鎖 159
6.5.1 共享數據和競爭條件 160
6.5.2 使用鎖進行同步 163
6.5.3 與進程池共享數據 166
6.6 多進程,多事件循環 170
6.7 本章小結 173
第7 章 通過執行緒處理阻塞任務 175
7.1 threading模組 176
7.2 通過asyncio使用執行緒 180
7.2.1 request庫 180
7.2.2 執行緒池執行器 181
7.2.3 使用asyncio的執行緒池執行器 183
7.2.4 默認執行器 184
7.3 鎖、共享數據和死鎖 186
7.3.1 可重入鎖 188
7.3.2 死鎖 190
7.4 單執行緒中的事件循環 192
7.4.1 Tkinter 193
7.4.2 使用asyncio和執行緒構建回響式UI 195
7.5 使用執行緒執行CPU密集型工作 203
7.5.1 多執行緒與hashlib 203
7.5.2 多執行緒與NumPy 206
7.6 本章小結 208
第8 章 流 211
8.1 流 212
8.2 傳輸和協定 212
8.3 流讀取與流寫入 216
8.4 非阻塞命令行輸入 219
8.5 創建伺服器 230
8.6 創建聊天伺服器和客戶端 232
8.7 本章小結 239
第9 章 Web應用程式 241
9.1 使用aiohttp創建REST API 242
9.1.1 什麼是REST 242
9.1.2 aiohttp伺服器基礎知識 243
9.1.3 連線到資料庫並返回結果 244
9.1.4 比較aiohttp和Flask 251
9.2 異步伺服器網關接口 253
9.3 ASGI 與 Starlette 255
9.3.1 使用Starlette的REST端點 255
9.3.2 WebSocket與Starlette 257
9.4 Django異步視圖 261
9.4.1 在異步視圖中運行阻塞工作 267
9.4.2 在同步視圖中使用異步代碼 268
9.5 本章小結 269
第10 章 微服務 271
10.1 什麼是微服務 272
10.1.1 代碼的複雜性 272
10.1.2 可擴展性 272
10.1.3 團隊和堆疊獨立性 273
10.1.4 asyncio如何提供幫助 273
10.2 backend-for-frontend模式 273
10.3 實施產品列表API 275
10.3.1 “用戶收藏”服務 275
10.3.2 實現基礎服務 276
10.3.3 實現backend-for-frontend服務 281
10.3.4 重試失敗的請求 287
10.3.5 斷路器模式 290
10.4 本章小結 296
第11 章 同步 297
11.1 了解單執行緒並發錯誤 298
11.2 鎖 302
11.3 使用信號量限制並發性 306
11.4 使用事件來通知任務 312
11.5 條件 317
11.6 本章小結 322
第12 章 異步佇列 323
12.1 異步佇列基本知識 324
12.1.1 Web應用程式中的佇列 331
12.1.2 網路爬蟲佇列 334
12.2 優先權佇列 337
12.3 LIFO佇列 345
12.4 本章小結 347
第13章 管理子進程 349
13.1 創建子進程 349
13.1.1 控制標準輸出 352
13.1.2 同時運行子進程 355
13.2 與子進程進行通信 359
13.3 本章小結 363
第14章 高級asyncio 365
14.1 帶有協程和函式的API 366
14.2 上下文變數 368
14.3 強制事件循環疊代 370
14.4 使用不同的事件循環實現 371
14.5 創建自定義事件循環 373
14.5.1 協程和生成器 373
14.5.2 不建議使用基於生成器的協程 374
14.5.3 自定義可等待對象 376
14.5.4 使用帶有future的套接字 379
14.5.5 任務的實現 381
14.5.6 實現事件循環 383
14.5.7 使用自定義事件循環實現伺服器 386
14.6 本章小結 388

相關詞條

熱門詞條

聯絡我們