如何在我的AWS EC2实例上处理多个Python请求?

时间:2018-09-02 23:45:20

标签: python amazon-web-services flask amazon-ec2 elastic-beanstalk

我在Elastic Beanstalk上部署了Flask应用程序到AWS的EC2实例上。如果同时有100个人连接到我的服务器,那是否不意味着他们必须在100个队列中等待,因为该应用一次只能处理一个实例?

如何做到这一点,以便我可以使用相同的IP地址来处理更多请求?谢谢!

1 个答案:

答案 0 :(得分:0)

简短的答案是使用uWSGIgunicorn

更长的答案是您的直觉是正确的-您担心的是“并发”或您的应用程序可以处理的并发请求数。是的,没有任何应用程序服务器的单个Flask应用程序一次可以处理一个请求。您如何改变呢?对于大多数Python应用程序,并发单位是一个过程(有些框架对此进行了更改,但是大多数应用程序部署可能是基于过程的)。也就是说,您为自己认为需要的每个并发请求运行一个流程。像uWSGI这样的应用服务器会监听您的应用,然后将请求从池中分派到某个进程。那么,您需要多少个流程?

您需要的第二个概念是“吞吐量”-在特定时间内可以处理多少个请求,这受“并发”影响但与之不同,直觉可能会误导您。假设您有8个流程。您可能会认为“但是我有100个用户,显然8个用户还不够”。假设您知道每个请求都在1/8(.125)秒内完成。这意味着每个进程每秒可以处理8个请求。 8次流程;您的吞吐量大约为每秒64个请求。 8流程使您比原来预期的要更接近100个用户。您的100个用户可能实际上不会在那一秒钟的窗口中发出请求。可能,但不太可能。问题不是并发,而是用户是否在合理的时间内得到响应。

希望这会有所帮助。扩展是一个很棒的话题-同时简单明了又令人沮丧。随着流量的增加,上述指南将发生变化,您将需要越来越多的高级技术。但是要开始使用-保持简单并专注于基础知识。

请参见How many concurrent requests does a single Flask process receive?