twisted Deferred學習筆記一
来源:互联网 发布:工作计划软件app 编辑:程序博客网 时间:2024/06/07 02:28
Deferred筆記一
Deferred 的簡單套路
從twisted的文檔入手,將Deferred獨立出來簡單的說明作用與使用方法,這樣更能快速對Deferred 有深刻的了解。
一、學習資料
1、主要參考資料
官方文檔 http://twistedmatrix.com/projects/core/documentation/howto/deferredindepth.html
關聯譯文 http://wiki.woodpecker.org.cn/moin/twistedTUT00?action=AttachFile&do=get&target=deferred_tutorial.html (此 鏈接將會下載離線文檔)
2、關聯資源
http://wiki.woodpecker.org.cn/moin/TwistedTUT
二、Deferred的作用
Deferred的主要作用可以 用一句話比較形象說明,“不要打电话给我,我会打给你的(Don't Call Us, We'll Call You) ”。相當於做好計劃後,執行交給Deferred,完成後再找我,我可要到一邊Happy去了。
它會根據callback運行結果(正常、發生例外)從callback鏈表中選擇執行已註冊的相應的 callback函數,從而實現事件方式來驅動程序。
callback的運行不影響主程序 的運行,Deferred.callback執行後馬上返回。(這點有待在後面證明)
三、Deferred實例
from twisted.internet import defer
d=defer.Deferred()
實例化後就可以對Deferred進行操作。
四、callback鏈表
鏈表是用來放置callback函數,鏈表中的函數可以響應三類事件,正常結束、例外結束、任意(包括前面兩者),它 們分別用addCallback、addErrback、addBoth註冊到鏈表中。也就是說函數正常結束返回調用addCallback註冊的函數, 發生例外則調用addErrback註冊的函數,使用addBoth註冊的函數無論返回什麼結果都會被調用。
五、callback函數註冊
除了上面提過的addCallback、addErrback、addBoth三個註冊函數外,還有另外一個 addCallbacks可以同時註冊處理正常結束和例外結束的函數。
2
3
4
5
6def deferredExample():
d = defer.Deferred()
d.addCallback(failAtHandlingResult)
d.addCallbacks(yesDecision, noDecisionPassthru)
d.addCallback(handleResult) # - A -
d.addErrback(handleFailure)
上面代碼中第4行的addCallbacks效果如 同
d.addCallback(yesDecision)
d.addErrback(noDecisionPassthru)
另 外,我們也可以將註冊過程寫成下面形式。
d=refer.Deferred().addCallback(failAtHandlingResult).addCallbacks(yesDecision, noDecisionPassthru).addCallback(handleResult).addErrback(handleFailure)
六、callback鏈執行順序
Deferred的鏈表是按順序從第一個註冊函數開始直到最後一個函數。如果發生例外時,有多個例外處理函數,則會調 用發生例外函數下面第一個例外處理函數。後面的例外處理函數將不會被調用,除非第一個例外處理函數將這個例外向下傳遞。
七、其它一些特性
Deferred實例中還有另外一些函數,如 pause,unpause,setTimeout,timeoutCall,chainDeferred,這些將留作下一步的測試。
另外還沒涉及到的是Deferred上一級的defer庫中的函數及其它類的使用,從一些代碼看來這些函數將會進一步有利於 Deferred的應用,但這也有待後面的進上步學習。
八、總結
經過Deferred are beautiful一節學習,了解Deferred的使用方法及其事件響應機制。
- twisted Deferred學習筆記一
- twisted Deferred學習筆記一
- twisted deferred
- Deferred Object In Twisted
- twisted异步机制-Deferred
- twisted异步机制--Deferred
- twisted中的延迟对象deferred
- Twisted之Deferred(一)
- Twisted之Deferred(二)
- Twisted源码分析4--Deferred
- Twisted学习(三)---------------Deferred介绍
- Twisted入门教程(7)--Deferred
- twisted学习笔记之: 延迟对象deferred
- twisted中deferred异步的理解
- 跟踪 twisted 里deferred 的Callback
- twisted入门教程之七:小插曲,Deferred
- 对twisted 中deferred异步的理解
- Programming Language :: Python :: Understanding Twisted Deferred
- twisted學習筆記二--twisted的那三板斧
- HUAWEI 20140911 Java机试题:计时器问题
- 中文域名怎样做虚拟配置?虚拟主机主机无法识别中文域名的解决办法?
- 【Android笔记】各个屏幕的logo尺寸要求
- 分布式缓存-Memcached
- twisted Deferred學習筆記一
- 解决SQL_Server2000“以前的某个程序安装已在安装计算机上创建挂起的文件操作。安装程序前必须重新启动计算机”
- GridView的RowCommand事件和DataList的ItemCommand事件
- nginx+fastcgi 實現多django站點應用
- hadoop 在 centos 6.5 安装指导
- 一点论文写作心得
- SVN分支与合并
- 安卓初学 启动程序欢迎界面
- SEM相关简称