Я пытаюсь делать синхронные запросы, используя Tornado.
Пытался делать вызовы API.
main.py
import tornado.web
import tornado.httpserver
import tornado.options
import tornado.ioloop
from tornado.web import url
from handlers import IndexHandler
from tornado.options import define, options
define("port", default=8000, help="run on the given port", type=int)
if __name__ == "__main__":
tornado.options.parse_command_line()
app = tornado.web.Application(
handlers=[
url(r"/", IndexHandler),
]
)
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
и мой handlers.py это ...
import tornado.web
import tornado.httpclient
import urllib
import json
import datetime
import time
class IndexHandler(tornado.web.RequestHandler):
def get(self):
query = self.get_argument('q')
client = tornado.httpclient.HTTPClient()
response = client.fetch("https://pokeapi.co/api/v2/pokemon/" + urllib.urlencode(("query")))
print(response)
if response == "Not Found":
self.write("Invalid Input")
response_data = json.loads(response.body)
pikachu_name = response_data['name']
pikachu_order = response_data['order']
self.write("""
Pickachu Name: %s <br>
Pickachu Order: %d <br>
""" %(pikachu_name, pikachu_order))
Теперь проблема, с которой я сталкиваюсь,
[E 200407 02:18:37 web:1792] Uncaught exception GET /?q=pikachu (::1)
HTTPServerRequest(protocol='http', host='localhost:8000', method='GET', uri='/?q=pikachu', version='HTTP/1.1', remote_ip='::1')
Traceback (most recent call last):
File "C:\Python\Python37\lib\site-packages\tornado\web.py", line 1701, in _execute
result = method(*self.path_args, **self.path_kwargs)
File "C:\Users\Bagga\Documents\tornado\Tweet Rate\handlers.py", line 12, in get
client = tornado.httpclient.HTTPClient()
File "C:\Python\Python37\lib\site-packages\tornado\httpclient.py", line 107, in __init__
self._async_client = self._io_loop.run_sync(make_client)
File "C:\Python\Python37\lib\site-packages\tornado\ioloop.py", line 526, in run_sync
self.start()
File "C:\Python\Python37\lib\site-packages\tornado\platform\asyncio.py", line 149, in start
self.asyncio_loop.run_forever()
File "C:\Python\Python37\lib\asyncio\base_events.py", line 529, in run_forever
'Cannot run the event loop while another loop is running')
RuntimeError: Cannot run the event loop while another loop is running
[E 200407 02:18:37 web:2250] 500 GET /?q=pikachu (::1) 55.85ms
В чем проблема и как я могу ее решить?
Основная ошибка, которую я вижу здесь:
RuntimeError: Невозможно запустить событие l oop, пока другой l oop работает
Я чувствую, что это связано с IOL oop и HTTPClient, но не могу понять, в чем проблема?