Python asyncio 並發編程 Python Concurrency with Asyncio
[英]馬修·福勒(Matthew Fowler)著 譯 殷海英
- 出版商: 清華大學
- 出版日期: 2023-01-01
- 定價: $768
- 售價: 8.5 折 $653
- 語言: 簡體中文
- ISBN: 7302622833
- ISBN-13: 9787302622833
-
相關分類:
Python、程式語言
- 此書翻譯自: Python Concurrency with Asyncio
立即出貨
買這商品的人也買了...
-
$299Python 機器學習手冊:從數據預處理到深度學習 (Machine Learning with Python Cookbook: Practical Solutions from Preprocessing to Deep Learning)
-
$580$458 -
$480$379 -
$580$493 -
$780$616 -
$1,000$790 -
$474$450 -
$890$757 -
$2,280$2,166 -
$834$792 -
$720$562 -
$708$673 -
$704Vue.js+Django高性能全棧論道
-
$1,010模式識別與電腦視覺手冊(第6版)
-
$650$507 -
$458動手學機器學習
-
$1,200$948 -
$720$562 -
$534$507 -
$600$450 -
$948$901 -
$980$774 -
$708$673 -
$479$455 -
$690$538
相關主題
商品描述
標準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