将 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 版本)。您可以使用 asyncio
的 set_default_executor
方法来控制它,但我不会为此担心。
如何防止 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 版本)。您可以使用 asyncio
的 set_default_executor
方法来控制它,但我不会为此担心。