gunicorn
Werkzeug
gunicorn | Werkzeug | |
---|---|---|
18 | 11 | |
9,878 | 6,664 | |
- | 0.2% | |
8.1 | 8.9 | |
about 1 month ago | 21 days ago | |
Python | Python | |
GNU General Public License v3.0 or later | BSD 3-clause "New" or "Revised" License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
gunicorn
- Gunicorn: 'Green Unicorn' Is a WSGI HTTP Server for Unix
-
Nginx Unit – Universal web app server
I'm hoping so – gunicorn has a long-open pull request that would fix `--reuse-port`, which currently does nothing
https://github.com/benoitc/gunicorn/pull/2938
- SynchronousOnlyOperation from celery task using gevent execution pool on django orm
-
Deploying Django when using python-socketio
However, I'm curious about the best way to deploy, specifically with regard to WSGI. I've tried using the raw eventlet WSGI server (`eventlet.wsgi.server(eventlet.listen(("", 8000)), application)`). I then start it with `python manage.py runserver`. This has worked okay, but I'm unsure about how scalable it is. It seems like the standard stack is Django + Gunicorn + NGINX. Based on `python-socketio` documentation, this should be possible. I tried django + eventlet + gunicorn, but it seems like gunicorn a) [doesn't play nice with eventlet](https://github.com/benoitc/gunicorn/pull/2581) and b) only supports one worker. Gevent + Gunicorn doesn't have this bug, but still only supports one worker. Also, I'm not sure how actively maintained gevent is. So I'm not sure how scalable either Gunicorn + eventlet or Gunicorn + geventlet is as a WSGI server. So I'm not sure if Gunicorn is my best bet, or if it's too limited.
- The Django ecosystem is not so good
-
3 cool project ideas for Python programmers
For building your API, I recommend using the Flask library. It is very beginner-friendly, and you will be able to build a simple API in a matter of minutes! Keep in mind that, for a more serious project, you should definitely use something like gunicorn to run you API as a production server.
-
Django 4.1 Released
Interesting looks like it might actually be a python bug. Somehow just changing from sys.exit(0) -> os._exit(0) apparently fixes it.
https://github.com/benoitc/gunicorn/pull/2820
-
Serverless Templates for AWS and Python
The cool thing is that you can easily migrate your WSGI- application such as Flask, Django, or Gunicorn to AWS.
-
Scope of database threads + connections + sessions
Yeah, that's kind of the impression I was getting. I stumbled across a github issue for gunicorn along these lines.
Werkzeug
-
Flask like web framework under 100 lines of code
The angle brackets on their own should be a sign that this is not the case, because that's not regular expression syntax. Flask uses werkzeug.routing instead. In fact, the module docs specifically call out the difference:
-
Django or Flask and why?
Flask doesn’t support ASGI; neither does Werkzeug. The official guidance for running Flask with an ASGI server is to wrap it in middleware. The open GitHub issue for Werkzeug to support ASGI is #1322.
-
Creating a ‘ghost’ website?
But this may be a starting point: https://github.com/pallets/werkzeug/blob/main/src/werkzeug/middleware/http_proxy.py
-
I found (and fixed) a vulnerability in Python
> In this case, he initially presumed that the problem would be with Flask, Bottle, and Tornado still honoring a semi-colon as a separator in a uri
Flask (or rather Werkzeug what it's based on) removed implicit semicolon support for URL 13 years ago: https://github.com/pallets/werkzeug/commit/0ea28bbc6f5f05eef...
-
PEP 661 -- Sentinel Values
Werkzeug (library used by Flask) had a repr for its sentinel long before getting type annotations.
-
New Versions Released! Flask 2.0 with async
Flask getting async support is a huge step for the asyncio web ecosystem in Python. I wonder how Flask's ASGI support will evolve in parallel with Quart[1] which bills itself as the ASGI version of Flask and is maintained by a member of the Pallets team. One of the maintainers of Werkzeug even recommended using Quart[2]
[1] https://pgjones.gitlab.io/quart/
[2] https://github.com/pallets/werkzeug/issues/1322#issuecomment...
-
Disable Color from the log that flaak produce
I’m pretty sure you need to establish a ‘werkzeug’ logger in a logging configuration and make sure that it has a handler for its effective level. But that’s just what I got from reading the source code. I could very well be wrong
-
logging: how to modify debug messages
You're not able to change the loglevel with werkzeug. It's hardcoded to info: https://github.com/pallets/werkzeug/blob/72b2e48e7d44927b1b7d6b2f940d0691230de893/src/werkzeug/serving.py#L388
-
15x speedup for flask/werkzeug form multipart file upload with bytes.find() and bytes.rindex()
The PRs are this initial one and this update. Also note this issue - almost 5 years to close :o.
What are some alternatives?
waitress - Waitress - A WSGI server for Python 3
bjoern - A screamingly fast Python 2/3 WSGI server written in C.
uwsgi - Official uWSGI docs, examples, tutorials, tips and tricks
meinheld - Meinheld is a high performance asynchronous WSGI Web Server (based on picoev)
Paste - Paste is in maintenance mode. Please consider other options.
hypercorn - Hypercorn is an ASGI and WSGI Server based on Hyper libraries and inspired by Gunicorn.
hypercorn
flask - The Python micro framework for building web applications. [Moved to: https://github.com/pallets/flask]