了解twisted时遇到的问题

来源:互联网 发布:网络报纸取代传统报纸 编辑:程序博客网 时间:2024/06/18 09:24

Twisted安装:

Pip install twisted

显示

Requirement already satisfied: twisted in e:\python\lib\site-packages

但是编译过程中

ImportError: No module named twisted.internet

在python环境下使用 help(‘modules’) 能够看到twisted模块
尝试卸载该模块 pip uninstall twisted 后用pip重新安装,成功。

callWhenRunning:reactor.callWhenRunning(a = fibonacci(1,1,99))

这个语句出现错误

TypeError: callWhenRunning() takes at least 2 arguments (1 given)

去掉赋值语句,通过函数内部赋值
错误:

AssertionError: 573147844013817084101 is not callable

去掉递归语句
错误:

AssertionError: None is not callable

检查发现函数引用不应有()
重新测试成功
用于测试的递归函数(计算斐波那契数列):

def fibonacci(a,b,n):    if n:        return fibonacci(b,a+b,n-1)    else:            return b

通过traceback观察Twisted调用:

File “test.py”, line 14, in
reactor.run() File “E:\python\lib\site-packages\twisted\internet\base.py”, line 1242, in
run
self.startRunning(installSignalHandlers=installSignalHandlers) File “E:\python\lib\site-packages\twisted\internet\base.py”, line
1222, in startRunning
ReactorBase.startRunning(self) File “E:\python\lib\site-packages\twisted\internet\base.py”, line 735, in
startRunning
self.fireSystemEvent(‘startup’) File “E:\python\lib\site-packages\twisted\internet\base.py”, line 686, in
fireSystemEvent
event.fireEvent() File “E:\python\lib\site-packages\twisted\internet\base.py”, line 428, in
fireEvent
DeferredList(beforeResults).addCallback(self._continueFiring) File “E:\python\lib\site-packages\twisted\internet\defer.py”, line
321, in addCallback
callbackKeywords=kw) File “E:\python\lib\site-packages\twisted\internet\defer.py”, line 310, in
addCallbacks
self._runCallbacks() File “E:\python\lib\site-packages\twisted\internet\defer.py”, line 653, in
_runCallbacks
current.result = callback(current.result, *args, **kw) File “E:\python\lib\site-packages\twisted\internet\base.py”, line 441, in
_continueFiring
callable(*args, **kwargs) File “test.py”, line 11, in ask traceback.print_stack()

stop():
通过在程序内部使用reactor.stop()终止

addReader(self):
创建一个socket连接后,通过reactor.addReader(self)将自己传递给reactor

ClientFactory和Protocol:
ClientFactory的工作是管理连接事件,Protocol对象处理为一个成功的连接。一旦连接建立,Protocol就接管下面的工作,包括收发数据和决定是否关闭连接。

当编写一个启动非同步操作的函数时,返回一个Deferred对象。当操作完成时,调用Deferred的callback方法来返回值。如果操作失败,调用Deferred.errback函数来跑出异常。

临时文件下载网页:

downloadToTempFile(url).addCallback(printFile).addErrback(printError)reactor.run()def downloadToTempFile(url):    tmpfd,tempfilename = tempfile.mkstemp()    os.close(tmpfd)    return client.downloadPage(url,tempfilename).addCallback(returnFilename,tempfilename)

实现一个简单的http服务器:

from twisted.web import httpclass MyHttpFactory(http.HTTPFactory):    protocal = MyHttpclass MyHttp(http.HTTPChannel):    requestFactory = MyRequestHandlerclass MyRequestHandler(http.Request):    pages = {        '/':'<h1>Home</h1>Home Page',        '/test':'<h1>Test</h1>Test Page',        }    def process(self):        if self.pages.has_key(self.path):            self.write(self.pages[self.path])        else:            self.setResponseCode(http.NOT_FOUND)            self.write("<h1>Not Found</h1>Sorry,no such page.")        self.finish()if __name__ == '__main__':    from twisted.internet import reactor    reactor.listenTCP(8000,MyHttpFactory())    reactor.run()

出现错误代码:

NameError: name ‘MyHttp’ is not defined

调整类声明顺序
再次测试,在浏览器输入地址http://127.0.0.1:8080/无响应
检查浏览器network,发现tcp连接成功但服务器无响应
测试发现回调异常
查阅文档后暂定为版本问题,搁置

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 广州在校大学生怎么办护照 民间借贷无法还怎么办 退伍档案没接收怎么办 档案被单位扣住怎么办 公积金提不出来怎么办 公积金还贷款怎么办手续 科一预约失败怎么办 科四忘记预约怎么办 我科目一缺考了怎么办? 无可选考试场地怎么办 早产儿脑部发育不好怎么办 宝宝脑部发育不好怎么办 小孩脑部发育不好怎么办 8岁儿童智力低下怎么办 儿童食物不耐受怎么办 忘记就诊卡号怎么办 nt检查预约不到怎么办 听力不好科目三怎么办 青岛公安不立案怎么办 长春驾照丢了怎么办 驾照超期一个月怎么办 太原暂住证丢了怎么办 太原居住证丢了怎么办 太原自行车丢了怎么办 太原身份证丢了怎么办 在太原健康证怎么办 学车体检色盲怎么办 驾照到期有色弱怎么办 入户体检备孕怎么办 去驾校体检散光怎么办 报考警校视力不合格怎么办 违章网上扣分怎么办呢 毓婷避孕后怀孕怎么办 眼睛色盲考驾照怎么办 驾校体检视力不合格怎么办 c1扣完12分怎么办 c1驾证扣满12分怎么办 手术当天来月经怎么办 拔牙当天来月经怎么办 月经期拔牙了怎么办 科三挂了两次了怎么办