# -*- coding: utf-8 -*- import tornado.httpserver import tornado.httpclient import tornado.web import tornado.options from adisp import async, process import logging logging.basicConfig() log = logging.getLogger() log.setLevel(logging.DEBUG) class MainHandler(tornado.web.RequestHandler): @process def perform_response(self, url): @async def do_get(callback): http = tornado.httpclient.AsyncHTTPClient() http.fetch(url, callback=lambda response: callback(response)) response = yield do_get() if response.error: if self._headers_written: log.error("Exception after headers written") else: self._handle_request_exception(response.error) if not self._finished: self.write(response.body) self.finish() @tornado.web.asynchronous def get(self, url): self.perform_response(url) application = tornado.web.Application([ (r"/(.*)", MainHandler), ]) if __name__ == "__main__": http_server = tornado.httpserver.HTTPServer(application) http_server.listen(8888) tornado.ioloop.IOLoop.instance().start()