Вот проблема:
instance = io_loop.IOLoop.current()
response = instance.run_sync(call)
run_sync
сам пытается запустить ioloop.Но, как видно из вашего кода, instance
уже запущен.Таким образом, вы получаете ошибку.
Если вы хотите отправить значение, возвращенное методом call()
, обратно пользователю, преобразуйте ваши методы в сопрограммы (используйте синтаксис async/await
).
Пример:
class RegistrationHandler(tornado.web.RequestHandler):
async def post(self, *args, **kwargs):
response = await call_async_register("some params")
self.write(response)
async def call_async_register(parameters):
http_client = AsyncHTTPClient()
http_request = HTTPRequest(url, request_type.name, headers={'X-Peering': '1'}, body=body)
try:
response = await http_client.fetch(http_request)
return response.body.decode()
except Exception as err:
self.logger.exception("Account Request Failed: {}".format(err))
return None