[0] - https://www.appdynamics.com/blog/engineering/a-performance-a...
[0] - https://www.appdynamics.com/blog/engineering/a-performance-a...
bjorn is fast because it has a minimal feature set. No threads, no multiprocessing, no nothing. If it works for you, great, but it's never satisfied my requirements.
I'd avoid uWSGI, it's performance is good but it's so complicated with so many features that I never felt confident using it.
Never used waitress except in development, but people seem to have had success in production.
It seems like the new trend for Python servers is ASGI (https://asgi.readthedocs.io/en/latest/), e.g. as in uvicorn (https://www.uvicorn.org/).
Some fun extra features that uWSGI provides:
- Daemon management: It can manage other daemons, for example Celery, for you, so you can put your whole environment into a single uWSGI.conf.
- A cron-like interface for generating events on a schedule.
- Emperor - hosting of multiple apps. This is extremely configurable, you can have the server look at the filesystem for config files for the simplest setup but it also supports AQMP, a Postgres database, MongoDB, a shell command or a bunch of other things. It has a bunch of interesting isolation options, like running each app in its own Linux namespace. It also has (optional) socket activation, so apps won't be started until the first request.
- Auto-scaling
- Soon, multiple event-loop/IO subsystems to choose from, including asyncio
I've been meaning to have a look at nginx-unit though.
Its primary use case is that it is pure python, doesn't rely on any specific libraries or compilers to run/build, and is a threaded WSGI implementation so it uses Python threads to run a WSGI app.
It works well for what it needs to do, and hopefully it is fairly robust. I've personally ran waitress directly facing the internet, but will readily admit that in most cases running it behind a load balancer is a good idea, especially since it doesn't support SSL out of the box (yet, I should say, it's on my roadmap).
It won't win any speed contests and it won't win performance contests, but it holds its own.
If you have any issues, please drop by https://github.com/pylons/waitress/issues and I'll see if I can help you out :-)