注冊(cè) | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁出版圖書科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)軟件與程序設(shè)計(jì)Python asyncio并發(fā)編程

Python asyncio并發(fā)編程

Python asyncio并發(fā)編程

定 價(jià):¥128.00

作 者: [英]馬修·福勒(Matthew Fowler)著,殷海英 譯
出版社: 清華大學(xué)出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

購(gòu)買這本書可以去


ISBN: 9787302622833 出版時(shí)間: 2023-01-01 包裝: 平裝-膠訂
開本: 16開 頁數(shù): 字?jǐn)?shù):  

內(nèi)容簡(jiǎn)介

  標(biāo)準(zhǔn)Python程序很容易過載,從而出現(xiàn)慢如龜爬的情況。asyncio庫(kù)正是為了解決這些問題而構(gòu)建的,它簡(jiǎn)化了任務(wù)的劃分和調(diào)度。asyncio可無縫地同時(shí)處理多個(gè)操作,使應(yīng)用程序疾如閃電,且具有擴(kuò)展性?! 禤ython asyncio并發(fā)編程》在大量示例的引導(dǎo)下,介紹異步、并行和并發(fā)編程。將難理解的并發(fā)內(nèi)容分解為簡(jiǎn)明易懂的流程圖,使讀者可輕松了解任務(wù)的運(yùn)行方式。在本書中,讀者將學(xué)習(xí)如何使用asyncio來突破Python的限制,從而加快Web服務(wù)器和微服務(wù)的運(yùn)行速度。讀者甚至可將asyncio與傳統(tǒng)的多處理技術(shù)結(jié)合起來,以大幅提升性能。主要內(nèi)容● 通過aiohttp構(gòu)建支持并發(fā)Web請(qǐng)求的Web API● 同時(shí)運(yùn)行海量SQL查詢● 創(chuàng)建一個(gè)可并行處理數(shù)GB數(shù)據(jù)的map-reduce作業(yè)● 在asyncio中使用線程來混合阻塞代碼和asyncio代碼

作者簡(jiǎn)介

  Matthew Fowler擁有近20年的軟件工程經(jīng)驗(yàn),曾任軟件架構(gòu)師、工程總監(jiān)等多個(gè)職位。他起初為科學(xué)應(yīng)用程序編寫軟件,然后轉(zhuǎn)向全棧Web開發(fā)和分布式系統(tǒng),終領(lǐng)導(dǎo)多個(gè)開發(fā)人員和管理人員團(tuán)隊(duì)為擁有數(shù)千萬用戶的電子商務(wù)網(wǎng)站編寫應(yīng)用程序及構(gòu)建系統(tǒng)。他與妻子Kathy住在馬薩諸塞州的列克星敦。

圖書目錄


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

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)