From 9f66752b18e6511855cf3211522ffe389b8487b2 Mon Sep 17 00:00:00 2001 From: Ciro Date: Thu, 10 Nov 2022 08:39:25 -0300 Subject: [PATCH] bench graphs --- bench/flask_plaintext.py | 14 ------------ bench/socketify_plaintext.py | 32 +++++++++++++++++++--------- bench/uvicorn_guvicorn_plaintext.py | 3 ++- misc/bench-bar-graph.png | Bin 0 -> 21508 bytes misc/bench-bar-graph.svg | 1 + 5 files changed, 25 insertions(+), 25 deletions(-) delete mode 100644 bench/flask_plaintext.py create mode 100644 misc/bench-bar-graph.png create mode 100644 misc/bench-bar-graph.svg diff --git a/bench/flask_plaintext.py b/bench/flask_plaintext.py deleted file mode 100644 index ecf9ee3..0000000 --- a/bench/flask_plaintext.py +++ /dev/null @@ -1,14 +0,0 @@ -import logging -logging.basicConfig() -logging.getLogger().setLevel(logging.CRITICAL) - -from flask import Flask -from waitress import serve - -app = Flask(__name__) - -@app.route('/') -def index(): - return "Hello, World!" - -serve(app, host='0.0.0.0', port=8000) diff --git a/bench/socketify_plaintext.py b/bench/socketify_plaintext.py index 36192e4..6c70297 100644 --- a/bench/socketify_plaintext.py +++ b/bench/socketify_plaintext.py @@ -1,13 +1,25 @@ from socketify import App +import os +import multiprocessing + +def run_app(): + app = App() + app.get("/", lambda res, req: res.end("Hello, World!")) + app.listen(8000, lambda config: print("PID %d Listening on port http://localhost:%d now\n" % (os.getpid(), config.port))) + app.run() + +def create_fork(): + n = os.fork() + # n greater than 0 means parent process + if not n > 0: + run_app() + +# fork limiting the cpu count - 1 +for i in range(1, multiprocessing.cpu_count()): + create_fork() + +run_app() # run app on the main process too :) + + -app = App() -app.get("/", lambda res, req: res.end("Hello World!")) -app.listen(8000, lambda config: print("Listening on port http://localhost:%d now\n" % config.port)) -app.run() -# 124943.00 req/s socketify.py - PyPy3 7.3.9 -# 70877.75 req/s socketify.py - Python 3.10.7 -# 30173.75 req/s gunicorn 20.1.0 + uvicorn 0.19.0 - Python 3.10.7 -# 17580.25 req/s gunicorn 20.1.0 + uvicorn 0.19.0 - PyPy3 7.3.9 -# 8044.50 req/s flask 2.1.2 PyPy 7.3.9 -# 1957.50 req/s flask 2.1.2 Python 3.10.7 diff --git a/bench/uvicorn_guvicorn_plaintext.py b/bench/uvicorn_guvicorn_plaintext.py index 9335f42..d01f167 100644 --- a/bench/uvicorn_guvicorn_plaintext.py +++ b/bench/uvicorn_guvicorn_plaintext.py @@ -14,4 +14,5 @@ async def app(scope, receive, send): }) #python3 -m gunicorn uvicorn_guvicorn_plaintext:app -w 1 -k uvicorn.workers.UvicornWorker -#pypy3 -m gunicorn uvicorn_guvicorn_plaintext:app -w 1 -k uvicorn.workers.UvicornWorker \ No newline at end of file +#pypy3 -m gunicorn uvicorn_guvicorn_plaintext:app -w 1 -k uvicorn.workers.UvicornWorker + diff --git a/misc/bench-bar-graph.png b/misc/bench-bar-graph.png new file mode 100644 index 0000000000000000000000000000000000000000..55f140047ee01da1521922d6703f7489a4ae43a6 GIT binary patch literal 21508 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 literal 0 HcmV?d00001 diff --git a/misc/bench-bar-graph.svg b/misc/bench-bar-graph.svg new file mode 100644 index 0000000..8128701 --- /dev/null +++ b/misc/bench-bar-graph.svg @@ -0,0 +1 @@ +1 process2 process4 processfalconfalconpypyuvicornuviconpypysocketifysocketifypypy050,000100,000150,000libraryrequests/s \ No newline at end of file