Я новичок в торнадо и питоне. Пару дней назад я начал писать non-blocking rest api, но еще не смог выполнить миссию. Когда я отправляю два запроса на эту конечную точку «localhost: 8080/async» одновременно, второй запрос получает ответ через 20 секунд! Это объясняет, что я делаю что-то неправильно.Python tornado gen.coroutine блокирует запрос
MAX_WORKERS = 4
class ASYNCHandler(tornado.web.RequestHandler):
executor = ThreadPoolExecutor(max_workers=MAX_WORKERS)
counter = 0
def pow_task(self, x, y):
time.sleep(10)
return pow(x,y)
async def background_task(self):
future = ASYNCHandler.executor.submit(self.pow_task, 2, 3)
return future
@gen.coroutine
def get(self, *args, **kwargs):
future = yield from self.background_task()
response= dumps({"result":future.result()}, default=json_util.default)
print(response)
application = tornado.web.Application([
('/async', ASYNCHandler),
('/sync', SYNCHandler),
], db=db, debug=True)
application.listen(8888)
tornado.ioloop.IOLoop.current().start()