【发布时间】:2012-03-07 19:06:33
【问题描述】:
我的代码如下所示:
... # class Site(Resource)
def render_POST(self,request)
otherclass.doAssync(request.args)
print '1'
return "done" #that returns the HTTP response, always the same.
...
def doAssync(self,msg):
d = defer.Deferred()
reactor.callLater(0,self.doStuff,d,msg)
d.addCallback(self.sucess)
def doStuff(self,d,msg):
# do some stuff
time.sleep(2) #just for example
d.callback('ok')
def sucess(msg):
print msg
输出:
1
好的
到目前为止,一切都很好,但是,HTTP 响应(返回“完成”)仅在延迟之后发生(time.sleep(2))。 我可以这么说,因为浏览器会持续“加载”2 秒。
我做错了什么?
【问题讨论】:
-
注意你在哪些线程中使用了 Twisted API——包括 Deferreds,即 d.callback——。这个版本的代码在错误的线程中使用了
d.callback。这会导致所有回调在错误的线程中运行,一旦你做的不仅仅是打印结果,这可能会破坏一些东西。
标签: python twisted twisted.web twisted.internet