Tornado 可以同时处理多少个请求?

问题描述 投票:0回答:1

基于tornado的Web应用程序运行有4个分叉子进程,如下所示。

async def post_fork_main():
    app = tornado.web.Application([(r'/', MyHandler)])
    server = tornado.httpserver.HTTPServer(app)
    server.add_sockets(sockets)
    await asyncio.Event().wait()


if __name__ == '__main__':
    sockets = tornado.netutil.bind_sockets(8080)
    tornado.process.fork_processes(4)
    print("Service is started successfully ...")
    asyncio.run(post_fork_main())

MyHandler 是

class MyHandler(tornado.web.RequestHandler):
    async def get(self):
        # some other processing code.
        await call_api()   # reply very slowly.
        # some other processing code.
        self.write('OK')

当当前 4 个子进程正在等待

all_api()
的响应时,如果有超过 4 个对我的服务的请求,会发生什么? CPU 几乎空闲吗?

python-3.x async-await tornado
1个回答
0
投票

请求排队,直到有一个进程准备好处理它们。

您可以自己测试 - 例如,如果

call_api()
的实现是:

async def call_api():
    print("Dealing with request")
    time.sleep(1)

您可以运行以下 bash 代码,它将同时调用 5 个 API 请求(或者至少不会阻塞和等待响应):

for i in {1..5}
do
  curl localhost:8080/ &
done

然后,您将看到服务器立即打印

"Dealing with request"
四次,并且只有在第一个请求返回响应后才会打印第五次。

© www.soinside.com 2019 - 2024. All rights reserved.