精通 twisted:python 事件驅動及異步編程 Expert Twisted: Event-Driven and Asynchronous Programming with Python

Mark Williams,Cory Benfield,Brian Warner,Moshe Zadka,Dustin Mitchell,Kevin Samu 黃凱 譚夢迪 華龍宇 劉月 張小坤譯

買這商品的人也買了...

商品描述

本書探討基於Python的事件驅動的網絡引擎Twisted,並回顧它的幾個的應用程序項目。
由社區領頭人撰寫,他們為所涵蓋的許多項目做出了貢獻,並在書中分享了他們來之不易的見解和經驗。

目錄大綱

前言
關於作者
關於技術評審員
致謝
部分基礎
第1章基於Twisted的事件驅動編程2
1.1一個關於Python版本的註釋3
1.2什麼是事件驅動編程3
1.3多重事件3
1.4 Application (tkinter.Tk()).mainloop ()4
1.5多路復用和多路分解5
1.6 select多路復用6
1.6.1 select的歷史、成員及目的6
1.6.2 select和套接字7
1.6.3套接字事件的“如何”和“為什麼”8
1.6.4處理事件9
1.6.5一個使用select的事件循環10
1.6.6事件驅動的客戶端和服務器11
1.7非阻塞I/O14
1.7.1知道何時停止14
1.7.2跟踪狀態14
1.7.3狀態讓程序更複雜18
1.8通過傳輸和協議管理複雜度18
1.9傳輸:使用協議19
1.9.1使用傳輸和協議打乒乓球20
1.9.2具有協議和傳輸的客戶端與服務器24
1.9.3 Twisted和反應器、協議以及傳輸25
1.10事件驅動編程的價值25
1.11 Twisted和現實世界27
1.12實時事件31
1.13通過zope.interface來實現的事件接口35
1.14事件驅動程序中的流控制37
1.15 Twisted中的流控制以及生產者和消費者38
1.15.1推送生產者38
1.15.2消費者41
1.15.3拉起生產者43
1.16小結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生成器和內聯回調61
2.6.1 yield表達式61
2.6.2 send方法62
2.6.3 throw方法64
2.6.4使用內聯回調進行異步編程65
2.7 Python中的協程67
2.7.1使用yield from的協程67
2.7.2協程的async和await用法68
2.8等待Deferred73
2.9通過ensureDeferred使用協程74
2.10多路復用Deferred75
2.11測試Deferred78
2.12小結81

第3章使用treq和Klein的應用83
3.1為何使用庫83
3.2 feed聚合84
3.3 treq介紹85
3.4 Klein介紹87
3.4.1 Klein和Deferred89
3.4.2使用Plating構建Klein模板90
3.5 feed聚合初探92
3.6使用Klein和treq進行測試驅動開發97
3.6.1在可安裝項目上運行測試98
3.6.2使用StubTreq測試Klein101
3.6.3使用Klein測試treq107
3.6.4使用twisted.logger記錄日誌110
3.6.5使用twist運行Twisted應用程序115
3.7小結118

第二部分項目
第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註冊服務器125
4.1.6鏡像構建125
4.1.7多階段構建126
4.2在Docker中使用Python127
4.2.1部署選項127
4.2.2虛擬環境132
4.2.3 Pex133
4.2.4構建選項134
4.3在Docker中使用Twisted135
4.3.1 ENTRYPOINT入口點和進程ID 1135
4.3.2自定義插件136
4.3.3 NColony136
4.4小結138

第5章使用Twisted作為WSGI服務器139
5.1 WSGI介紹139
5.1.1 PEP140
5.1.2原生案例141
5.1.3參考實現142
5.1.4 WebOb示例144
5.1.5 Pyramid示例145
5.2開始146
5.2.1 WSGI服務器146
5.2.2為什麼使用Twisted149
5.3使用多核的策略161
5.3.1負載均衡器162
5.3.2在共享模式下打開套接字163
5.3.3其他選項165
5.4動態配置166
5.4.1可A/B測試的Pyramid應用程序166
5.4.2使用AMP自定義插件167
5.4.3控製程序170
5.5小結171

第6章Tahoe-LAFS:權限少的文件173
6.1 Tahoe-LAFS是如何工作的173
6.2架構176
6.3 Tahoe-LAFS如何使用Twisted178
6.4曾經遇到的問題178
6.5內部文件節點接口180
6.6前端協議組合181
6.7 Web前端181
6.7.1文件類型、內容類型、/name/183
6.7.2保存至磁盤184
6.7.3 Range標頭185
6.7. 4返回端的轉換186
6.7.5渲染UI元素:Nevow模板187
6.8 FTP前端187
6.9 SFTP前端192
6.10向後不兼容的Twisted API192
6.11小結194
6.12參考資料195

第7章Magic Wormhole196
7.1 Magic Wormhole看起來像什麼197
7.2 Magic Wormhole是如何工作的198
7.3網絡協議、傳輸、客戶端兼容性199
7.4服務器架構201
7.5傳輸客戶端:可取消的Deferred203
7.6傳輸中繼服務器205
7.7 Wormhole客戶端架構206
7.8 Deferred與狀態機的比較207
7.9一次性觀察者209
7.10 Promise/Future與Deferred的比較210
7.11終發送和同步測試213
7.12使用Deferred進行異步測試214
7.13使用Defferred進行同步測試215
7.14小結219
7.15參考資料219

第8章使用WebSocket將數據推送到瀏覽器和微服務221
8.1為什麼使用WebSocket221
8.2 WebSocket和Twisted222
8.3原始WebSocket,從Python到Python223
8.4原始WebSocket,在Python和之間227
8.5帶有WAMP的更強大的WebSocket229
8.6小結235

第9章使用asyncio和Twisted的應用程序237
9.1核心概念237
9.2 Promise238
9.3準則239
9.4案例研究:具有aiohttp和treq的代理242
9.5小結246

第10章Buildbot和Twisted247
10.1 Buildbot的歷史247
10.1.1 Buildbot異步Python的演變248
10.1.2遷移同步API250
10.1.3異步構建步驟251
10.2 Buildbot的代碼251
10.2.1異步實用程序252
10.2.2去抖動252
10.2.3異步服務252
10.2.4 LRU緩存254
10.2.5 eventual255
10.2.6與同步代碼結合255
10.2.7 SQLAlchemy255
10.2.8 request256
10.2.9 Docker258
10.2.10共享資源的並發訪問259
10.2.11測試261
10.2.12偽造262
10.3小結263

第11章Twisted和HTTP/2264
11.1介紹264
11.2設計目標266
11.2.1無縫集成266
11.2.2默認情況下化的行為267
11.2.3分離問題和代碼重用267
11.3實現中的問題268
11.3.1標準接口的價值以及什麼是連接268
11.3.2多路復用和優先級270
11.3.3背壓275
11.3.4 Twisted中的背壓277
11.3.5 HTTP/2中的背壓279
11.4現狀和未來發展281
11.5小結282

第12章Twisted和Django Channel283
12.1介紹283
12.2 Channel構建基塊284
12.3消息代理和隊列285
12.4 Twisted分佈式多層286
12.5現狀和未來發展287
12.6小結288