I am sending 10 HTTP requests per second between Python Bottle server and a browser client with JS:
import bottle, time
app = bottle.Bottle()
@bottle.route('/')
def index():
return """<script>
var i = 0;
setInterval(() => {
i += 1;
let i2 = i;
console.log("sending request", i2);
fetch("/data")
.then((r) => r.text())
.then((arr) => {
console.log("finished processing", i2);
});
}, 100);
</script>"""
@bottle.route('/data')
def data():
return "abcd"
bottle.run(port=80)
The result is rather poor:
sending request 1
sending request 2
sending request 3
sending request 4
finished processing 1
sending request 5
sending request 6
sending request 7
finished processing 2
sending request 8
sending request 9
sending request 10
finished processing 3
sending request 11
sending request 12
Why does it fail to process 10 requests per second successfully (on an average i5 computer): is there a known bottleneck in my code?
Where are the 100 ms lost per request, that prevent the program to keep a normal pace like:
sending request 1
finished processing 1
sending request 2
finished processing 2
sending request 3
finished processing 3
?
Notes:
-
Tested with Flask instead of Bottle and the problem is similar
-
Is there a simple way to get this working:
-
without having to either monkey patch the Python stdlib (with
from gevent import monkey; monkey.patch_all()
), -
and without using a much more complex setup with Gunicorn or similar (not easy at all on Windows)?
?
-
from Where is the bottleneck in these 10 requests per second with Python Bottle + Javascript fetch?
No comments:
Post a Comment