Поместите AsyncHTTPClient или другой ожидаемый в метод get Tornado, чтобы автоматически создавать ThreadPoolExcutor - PullRequest
1 голос
/ 07 мая 2019

Как я могу предотвратить автоматическое создание ThreadPoolExector сервером Tornado.

ENV:

Windows 10

питон 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 и запрашиваю из http://127.0.0.1:5000 Chrome. Когда я устанавливал точки останова в Vs Code при отладке, я обнаружил, что ThreadPoolExectutor появлялся в стеке вызовов при каждом запросе, будет ли он неограниченно увеличиваться и выключение

1 Ответ

2 голосов
/ 07 мая 2019

Этот ThreadPoolExecutor используется для DNS-запросов и поступает из модуля asyncio стандартной библиотеки. Он имеет ограниченный размер, поэтому в какой-то момент он перестанет расти (ограничение зависит от вашей версии python). Вы можете контролировать это с помощью asyncio set_default_executor метода, но я бы не стал беспокоиться об этом.

...