Hi,
Streamlit uses the Tornado framework. It would be nice to read this discussion about some features that made Tornado more interested than Flask for this project. But the main point is that:
Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed. By using non-blocking network I/O, Tornado can scale to tens of thousands of open connections, making it ideal for long polling, WebSockets, and other applications that require a long-lived connection to each user.
From: Tornado Web Server — Tornado 6.4 documentation
So, I would say that Tornado Framework scale very well and is excelent for the requirements and needs of Streamlit, but there is a lot of other points that can impact in the performance and scalability of Streamlit:
- Deployment: If you use only a VM or local server, the application will never scale like Kubernetes and other Container Orchestration tools.
- IO Operations: If the application needs a lot of IO operations, this can be the bottleneck depending if a cache is used, the network resources available, database configuration and limits… all this things can decrease the performance of the applicantion and are not related with the Streamlit server
- Program Complexity: If the application is computation expensive, has many operations or/and has a lot of widgets, this could be the bottleneck of the application, because the request needs a lot of CPU resource/time to complete the client request. Large, Complex Streamlit Apps performance
So yes, as the last post, the most important thing for Streamlit App scaling is how you deploy your code (Consider that IO is not a limitation)