我的代碼如下所示:扭曲的非阻塞方法 - 如何?
... # 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
輸出:
確定
到目前爲止,一切都很好,但是,HTTP響應(回報「完成'),只發生在延遲(time.sleep(2))之後。 我可以告訴你,因爲瀏覽器保持'加載'2秒。
我在做什麼錯?
找到一些答案:http://stackoverflow.com/questions/6759115/asynchronous-wsgi-with-twisted – joaoricardo000 2012-02-16 11:45:45
請注意您使用哪些線程Twisted API - 包括Deferreds,即d.callback - in。此版本的代碼在錯誤的線程中使用'd.callback'。這會導致所有的回調都在錯誤的線程中運行,只要您不僅僅打印結果,這些回調可能會破壞某些內容。 – 2012-02-16 17:12:57