私のコードは次のようになります。ツイストノンブロッキング法 - どのように?
... # 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
出力:
OK
、これまでのところ、とても良いが、HTTPレスポンス(復帰 " done ')、遅延の後にのみ発生します(time.sleep(2))。 ブラウザは2秒間「読み込み中」を保持するので、これを知ることができます。
私は間違っていますか?
回答が見つかりました:http://stackoverflow.com/questions/6759115/asynchronous-wsgi-with-twisted – joaoricardo000
Twisted APIを使用するスレッドについては、Deferreds、つまりd.callback-inを含めて、注意してください。このバージョンのコードは間違ったスレッドで 'd.callback'を使います。これにより、すべてのコールバックが間違ったスレッドで実行されてしまいます。結果を出力するだけではなく、何かを壊してしまうでしょう。 –