Мой код выглядит так:
... # 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
ok
Пока все хорошо, но ответ HTTP (возврат 'done') происходит только после задержки (time.sleep(2)). Я могу сказать это, потому что браузер продолжает «загружаться» в течение 2 секунд.
Что я делаю неправильно?
d.callback
не в том потоке. Это приводит к тому, что все обратные вызовы выполняются в неправильном потоке, что, вероятно, сломает что-то, как только вы сделаете больше, чем просто распечатаете результат. - person Jean-Paul Calderone   schedule 16.02.2012