Merge pull request #32 from channelcat/more-benchmarks

Added bottle and kyoukai benchmarks, updated sanic and aiohttp
This commit is contained in:
Channel Cat 2016-10-16 00:51:17 -07:00 committed by GitHub
commit c1ff13ee79
5 changed files with 30 additions and 5 deletions

View File

@ -10,11 +10,13 @@ All tests were run on a AWS medium instance running ubuntu, using 1 process. Ea
| Server | Implementation | Requests/sec | Avg Latency |
| ------- | ------------------- | ------------:| -----------:|
| Sanic | Python 3.5 + uvloop | 29,128 | 3.40ms |
| Sanic | Python 3.5 + uvloop | 30,601 | 3.23ms |
| Wheezy | gunicorn + meinheld | 20,244 | 4.94ms |
| Falcon | gunicorn + meinheld | 18,972 | 5.27ms |
| Bottle | gunicorn + meinheld | 13,596 | 7.36ms |
| Flask | gunicorn + meinheld | 4,988 | 20.08ms |
| Aiohttp | Python 3.5 + uvloop | 2,974 | 33.49ms |
| Kyoukai | Python 3.5 + uvloop | 3,889 | 27.44ms |
| Aiohttp | Python 3.5 + uvloop | 2,979 | 33.42ms |
## Hello World

View File

@ -7,3 +7,4 @@ coverage
tox
gunicorn
bottle
kyoukai

View File

@ -4,12 +4,13 @@ from aiohttp import web
import asyncio
import sys
import uvloop
import ujson as json
loop = uvloop.new_event_loop()
asyncio.set_event_loop(loop)
async def handle(request):
return web.json_response({"test":True})
return web.Response(body=json.dumps({"test":True}).encode('utf-8'), content_type='application/json')
app = web.Application(loop=loop)
app.router.add_route('GET', '/', handle)

View File

@ -1,3 +1,5 @@
# Run with: gunicorn --workers=1 --worker-class=meinheld.gmeinheld.MeinheldWorker -b :8000 simple_server:app
import bottle
from bottle import route, run
import ujson
@ -6,5 +8,4 @@ import ujson
def index():
return ujson.dumps({'test': True})
run(server='gunicorn', host='0.0.0.0', port=8080)
app = bottle.default_app()

View File

@ -0,0 +1,20 @@
# Run with: python3 -O simple_server.py
import asyncio
from kyoukai import Kyoukai, HTTPRequestContext
import logging
import ujson
import uvloop
loop = uvloop.new_event_loop()
asyncio.set_event_loop(loop)
kyk = Kyoukai("example_app")
logger = logging.getLogger("Kyoukai")
logger.setLevel(logging.ERROR)
@kyk.route("/")
async def index(ctx: HTTPRequestContext):
return ujson.dumps({"test":True}), 200, {"Content-Type": "application/json"}
kyk.run()