龙卷风中的同步获取

在Tornado的官方文档(https://www.tornadoweb.org/en/stable/guide/async.html)中有一个同步获取的示例,但是当我将其放入我的get的{​​{1}}方法中时,它将返回以下错误:

IndexHandler

我的代码如下:

  File "/home/stefan/.local/lib/python3.6/site-packages/tornado/web.py",line 1697,in _execute
    result = method(*self.path_args,**self.path_kwargs)
  File "ex1.py",line 19,in get
    client = tornado.httpclient.HTTPClient()
  File "/home/stefan/.local/lib/python3.6/site-packages/tornado/httpclient.py",line 107,in __init__
    self._async_client = self._io_loop.run_sync(make_client)
  File "/home/stefan/.local/lib/python3.6/site-packages/tornado/ioloop.py",line 526,in run_sync
    self.start()
  File "/home/stefan/.local/lib/python3.6/site-packages/tornado/platform/asyncio.py",line 148,in start
    self.asyncio_loop.run_forever()
  File "/usr/lib/python3.6/asyncio/base_events.py",line 428,in run_forever
    'Cannot run the event loop while another loop is running')
RuntimeError: Cannot run the event loop while another loop is running

我相信我应该在import tornado.httpserver import tornado.ioloop import tornado.options import tornado.web import tornado.httpclient from tornado.options import define,options define("port",default=8000,help="run on the given port",type=int) class IndexHandler(tornado.web.RequestHandler): def get(self): client = tornado.httpclient.HTTPClient() response = client.fetch('https://www.google.com') print(response.body) if __name__ == "__main__": tornado.options.parse_command_line() app=tornado.web.Application(handlers=[(r"/",IndexHandler)],debug=True) http_server = tornado.httpserver.HTTPServer(app) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start() 中进行更改,以使其正常工作。

wnrs19850312 回答:龙卷风中的同步获取

因为您可以在追溯中看到,所以“同步” fetch在后​​台启动了它自己的ioloop。最简单的解决方法是将def get重写为协程(使用async def get或使用@gen.coroutine装饰器)并使用异步提取

class IndexHandler(tornado.web.RequestHandler):
    async def get(self):
        client = tornado.httpclient.HTTPClient()
        response = await client.fetch('https://www.google.com')
        print(response.body)
本文链接:https://www.f2er.com/3066363.html

大家都在问