将 AsyncHTTPClient 或其他可等待对象放入 Tornado 的 get 方法中,将自动创建 ThreadPoolExcutor

Put AsyncHTTPClient or other awaitable in Tornado's get method wiil create ThreadPoolExcutor automatically

如何防止 Tornado 服务器自动创建 ThreadPoolExector。

环境:

windows 10

python 3.7

龙卷风 6.0.2

import tornado.ioloop
import tornado.web
from tornado.httpclient import HTTPRequest, AsyncHTTPClient

class TestHandler(tornado.web.RequestHandler):
    WRITE_MP3_BUFFER_SIZE = 4096

    async def get(self):
        try:
            http_client = AsyncHTTPClient()
            req = HTTPRequest(
                url='https://www.google.com',
                method='GET')
            response = await http_client.fetch(req)
            contents = response.body.decode('utf-8')
            self.write(contents)
        except Exception as e:
            self.write(str(e))

if __name__ == "__main__":
    app = tornado.web.Application([
        tornado.web.url(r"/", TestHandler),
        ])
    app.listen(5000)
    print("Service Started")
    tornado.ioloop.IOLoop.current().start()

我在VS Code中调试此代码并通过Chrome从http://127.0.0.1:5000查询,当我在调试时在VS Code中设置断点时,我发现每次查询调用堆栈都会出现一个ThreadPoolExectutor,会不会无限增加然后关机?

这个ThreadPoolExecutor用于DNS请求,来自标准库的asyncio模块。它的大小有限,所以它会在某个时候停止增长(限制取决于您的 python 版本)。您可以使用 asyncioset_default_executor 方法来控制它,但我不会为此担心。