Oops, sorry that should be: def render_GET(self, request): def cb(data): request.write(data) request.finish() # note, we add our callback to the deferred then discard it self.opt.dbpool.runInteraction(blah).addCallback(cb) # we *return* a special value return server.NOT_DONE_YET