Mein Code sieht folgendermaßen aus:
... # 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
Das Ergebnis:
1
ok
So weit, so gut, aber die HTTP-Antwort (return 'done') erfolgt erst nach der Verzögerung (time.sleep(2)). Ich kann das feststellen, weil der Browser 2 Sekunden lang "lädt".
Was mache ich falsch?
0 Stimmen
Ich habe eine Antwort gefunden: stackoverflow.com/questions/6759115/
2 Stimmen
Seien Sie vorsichtig, in welchen Threads Sie Twisted APIs - einschließlich Deferreds, d.h. d.callback - verwenden. Diese Version des Codes verwendet
d.callback
im falschen Thread. Dies führt dazu, dass alle Rückrufe im falschen Thread ausgeführt werden, was wahrscheinlich etwas kaputt macht, sobald Sie mehr tun als nur das Ergebnis zu drucken.