精通Twisted:Python事件驅(qū)動(dòng)及異步編程
定 價(jià):99 元
叢書名:華章程序員書庫(kù)
- 作者:[美] 馬克·威廉姆斯(Mark Williams)[英] 科里·本菲爾德(C
- 出版時(shí)間:2020/12/1
- ISBN:9787111670353
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP311.561
- 頁(yè)碼:0
- 紙張:
- 版次:
- 開本:16開
本書探討基于Python的事件驅(qū)動(dòng)的網(wǎng)絡(luò)引擎Twisted,并回顧它的幾個(gè)*流行的應(yīng)用程序項(xiàng)目。由社區(qū)領(lǐng)頭人撰寫,他們?yōu)樗w的許多項(xiàng)目做出了貢獻(xiàn),并在書中分享了他們來之不易的見解和經(jīng)驗(yàn)。
前言
關(guān)于作者
關(guān)于技術(shù)評(píng)審員
致謝
第一部分 基礎(chǔ)
第1章 基于Twisted的事件驅(qū)動(dòng)編程2
1.1 一個(gè)關(guān)于Python版本的注釋3
1.2 什么是事件驅(qū)動(dòng)編程3
1.3 多重事件3
1.4 Application (tkinter.Tk()).mainloop()4
1.5 多路復(fù)用和多路分解5
1.6 select多路復(fù)用6
1.6.1 select的歷史、成員及目的6
1.6.2 select和套接字7
1.6.3 套接字事件的“如何”和“為什么”8
1.6.4 處理事件9
1.6.5 一個(gè)使用select的事件循環(huán)10
1.6.6 事件驅(qū)動(dòng)的客戶端和服務(wù)器11
1.7 非阻塞I/O14
1.7.1 知道何時(shí)停止14
1.7.2 跟蹤狀態(tài)14
1.7.3 狀態(tài)讓程序更復(fù)雜18
1.8 通過傳輸和協(xié)議管理復(fù)雜度18
1.9 傳輸:使用協(xié)議19
1.9.1 使用傳輸和協(xié)議打乒乓球20
1.9.2 具有協(xié)議和傳輸?shù)目蛻舳伺c服務(wù)器24
1.9.3 Twisted和反應(yīng)器、協(xié)議以及傳輸25
1.10 事件驅(qū)動(dòng)編程的價(jià)值25
1.11 Twisted和現(xiàn)實(shí)世界27
1.12 實(shí)時(shí)事件31
1.13 通過zope.interface來實(shí)現(xiàn)的事件接口35
1.14 事件驅(qū)動(dòng)程序中的流控制37
1.15 Twisted中的流控制以及生產(chǎn)者和消費(fèi)者38
1.15.1 推送生產(chǎn)者38
1.15.2 消費(fèi)者41
1.15.3 拉起生產(chǎn)者43
1.16 小結(jié)43
第2章 Twisted異步編程介紹45
2.1 事件處理程序和組合45
2.2 什么是異步編程48
2.3 未來值的占位符48
2.4 異步式異常處理50
2.5 Twisted中的Deferred介紹54
2.5.1 callback54
2.5.2 errback和Failure55
2.5.3 組合Deferred58
2.6 生成器和內(nèi)聯(lián)回調(diào)61
2.6.1 yield表達(dá)式61
2.6.2 send方法62
2.6.3 throw方法64
2.6.4 使用內(nèi)聯(lián)回調(diào)進(jìn)行異步編程65
2.7 Python中的協(xié)程67
2.7.1 使用yield from的協(xié)程67
2.7.2 協(xié)程的async和await用法68
2.8 等待Deferred73
2.9 通過ensureDeferred使用協(xié)程74
2.10 多路復(fù)用Deferred75
2.11 測(cè)試Deferred78
2.12 小結(jié)81
第3章 使用treq和Klein的應(yīng)用83
3.1 為何使用庫(kù)83
3.2 feed聚合84
3.3 treq介紹85
3.4 Klein介紹87
3.4.1 Klein和Deferred89
3.4.2 使用Plating構(gòu)建Klein模板90
3.5 feed聚合初探92
3.6 使用Klein和treq進(jìn)行測(cè)試驅(qū)動(dòng)開發(fā)97
3.6.1 在可安裝項(xiàng)目上運(yùn)行測(cè)試98
3.6.2 使用StubTreq測(cè)試Klein101
3.6.3 使用Klein測(cè)試treq107
3.6.4 使用twisted.logger記錄日志110
3.6.5 使用twist運(yùn)行Twisted應(yīng)用程序115
3.7 小結(jié)118
第二部分 項(xiàng)目
第4章 在Docker中使用Twisted122
4.1 Docker介紹122
4.1.1 容器123
4.1.2 容器鏡像123
4.1.3 runc和containerd124
4.1.4 客戶端124
4.1.5 注冊(cè)服務(wù)器125
4.1.6 鏡像構(gòu)建125
4.1.7 多階段構(gòu)建126
4.2 在Docker中使用Python127
4.2.1 部署選項(xiàng)127
4.2.2 虛擬環(huán)境132
4.2.3 Pex133
4.2.4 構(gòu)建選項(xiàng)134
4.3 在Docker中使用Twisted135
4.3.1 ENTRYPOINT入口點(diǎn)和進(jìn)程ID 1135
4.3.2 自定義插件136
4.3.3 NColony136
4.4 小結(jié)138
第5章 使用Twisted作為WSGI服務(wù)器139
5.1 WSGI介紹139
5.1.1 PEP140
5.1.2 原生案例141
5.1.3 參考實(shí)現(xiàn)142
5.1.4 WebOb示例144
5.1.5 Pyramid示例145
5.2 開始146
5.2.1 WSGI服務(wù)器146
5.2.2 為什么使用Twisted149
5.3 使用多核的策略161
5.3.1 負(fù)載均衡器162
5.3.2 在共享模式下打開套接字163
5.3.3 其他選項(xiàng)165
5.4 動(dòng)態(tài)配置166
5.4.1 可A/B測(cè)試的Pyramid應(yīng)用程序166
5.4.2 使用AMP自定義插件167
5.4.3 控制程序170
5.5 小結(jié)171
第6章 Tahoe-LAFS: 權(quán)限最少的文件系統(tǒng)173
6.1 Tahoe-LAFS是如何工作的173
6.2 系統(tǒng)架構(gòu)176
6.3 Tahoe-LAFS如何使用Twisted178
6.4 曾經(jīng)遇到的問題178
6.5 內(nèi)部文件節(jié)點(diǎn)接口180
6.6 前端協(xié)議組合181
6.7 Web前端181
6.7.1 文件類型、內(nèi)容類型、/name/183
6.7.2 保存至磁盤184
6.7.3 Range標(biāo)頭185
6.7.4 返回端的錯(cuò)誤轉(zhuǎn)換186
6.7.5 渲染UI元素:Nevow模板187
6.8 FTP前端187
6.9 SFTP前端192
6.10 向后不兼容的Twisted API192
6.11 小結(jié)194
6.12 參考資料195
第7章 Magic Wormhole196
7.1 Magic Wormhole看起來像什么197
7.2 Magic Wormhole是如何工作的198
7.3 網(wǎng)絡(luò)協(xié)議、傳輸延遲、客戶端兼容性199
7.4 服務(wù)器架構(gòu)201
7.5 傳輸客戶端:可取消的Deferred203
7.6 傳輸中繼服務(wù)器205
7.7 Wormhole客戶端架構(gòu)206
7.8 Deferred與狀態(tài)機(jī)的比較207
7.9 一次性觀察者209
7.10 Promise/Future與Deferred的比較210
7.11 最終發(fā)送和同步測(cè)試213
7.12 使用Deferred進(jìn)行異步測(cè)試214
7.13 使用Defferred進(jìn)行同步測(cè)試215
7.14 小結(jié)219
7.15 參考資料219
第8章 使用WebSocket將數(shù)據(jù)推送到瀏覽器和微服務(wù)221
8.1 為什么使用WebSocket221
8.2 WebSocket和Twisted222
8.3 原始WebSocket,從Python到Python223
8.4 原始WebSocket,在Python和JavaScript之間227
8.5 帶有WAMP的更強(qiáng)大的WebSocket229
8.6 小結(jié)235
第9章 使用asyncio和Twisted的應(yīng)用程序237
9.1 核心概念237
9.2 Promise238
9.3 準(zhǔn)則239
9.4 案例研究:具有aiohttp和treq的代理242
9.5 小結(jié)246
第10章 Buildbot和Twisted247
10.1 Buildbot的歷史247
10.1.1 Buildbot異步Python的演變248
10.1.2 遷移同步API250
10.1.3 異步構(gòu)建步驟251
10.2 Buildbot的代碼251
10.2.1 異步實(shí)用程序252
10.2.2 去抖動(dòng)252
10.2.3 異步服務(wù)252
10.2.4 LRU緩存254
10.2.5 eventual255
10.2.6 與同步代碼結(jié)合255
10.2.7 SQLAlchemy255
10.2.8 request256
10.2.9 Docker258
10.2.10 共享資源的并發(fā)訪問259
10.2.11 測(cè)試261
10.2.12 偽造262
10.3 小結(jié)263
第11章 Twisted和HTTP/2264
11.1 介紹264
11.2 設(shè)計(jì)目標(biāo)266
11.2.1 無(wú)縫集成266
11.2.2 默認(rèn)情況下最優(yōu)化的行為267
11.2.3 分離問題和代碼重用267
11.3 實(shí)現(xiàn)中的問題268
11.3.1 標(biāo)準(zhǔn)接口的價(jià)值以及什么是連接268
11.3.2 多路復(fù)用和優(yōu)先級(jí)270
11.3.3 背壓275
11.3.4 Twisted中的背壓277
11.3.5 HTTP/2中的背壓279
11.4 現(xiàn)狀和未來發(fā)展281
11.5 小結(jié)282
第12章 Twisted和Django Channel283
12.1 介紹283
12.2 Channel構(gòu)建基塊284
12.3 消息代理和隊(duì)列285
12.4 Twisted分布式多層系統(tǒng)286
12.5 現(xiàn)狀和未來發(fā)展287
12.6 小結(jié)288