Jak poprawić wydajność połączenia gevent i tornado?
Próbuję użyć gevent jako serwera wsgi i użyć tornado WSGIAplikacji do przetwarzania żądań. Oto kod
#!/usr/bin/env python
# coding=utf-8
import gevent
from gevent import monkey
monkey.patch_all(thread=False)
from gevent.pywsgi import WSGIServer
from tornado.wsgi import WSGIApplication
import tornado.web
import tornado.wsgi
import requests
class MainHandler(tornado.web.RequestHandler):
def get(self):
requests.get('http://google.com')
self.write('hello')
handlers = [
(r'/', MainHandler)
]
if __name__ == '__main__':
application = WSGIApplication(handlers)
server = WSGIServer(('', 9010), application)
server.serve_forever()
I używam testu apache do testowania wydajności. Polecenie testu to
ab -n 1000 -c 100 http://127.0.0.1:9010/
To powoduje 100qq na sekundę, jest zbyt wolne. W powyższym kodzie po prostu wysyłam żądanie http na drugą stronę, myślę, że w tej sytuacji gevent przełączy się na inny greenlet, gdy blok, i powinien mieć niewielki wpływ na wydajność, ale spadek wydajności gevent z 1600req na sekundę do 100 req na sekundę, nie mogę zrozumieć dlaczego.
Czy ktoś mógłby to wyjaśnić?