Wie kann die Leistung der Kombination aus Ereignis und Tornado verbessert werden?

Ich versuche, gevent als WSGI-Server zu verwenden und verwende die Tornado-WSGIA-Anwendung, um Anforderungen zu verarbeiten. Hier ist der Code

#!/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()

Und ich benutze Apache Benchmark, um die Leistung zu testen. Testbefehl ist

ab -n 1000 -c 100 http://127.0.0.1:9010/

Dadurch entstehen 100req pro Sekunde, es ist zu langsam. Im obigen Code habe ich nur eine http-Anforderung an eine andere Seite gesendet. Ich denke, in dieser Situation wird gevent beim Blockieren auf ein anderes Greenlet umschalten, und dies sollte wenig Einfluss auf die Leistung haben, aber die Leistung von gevent sinkt von 1600 Req pro Sekunde auf 100 Ich kann nicht herausfinden, warum.

Könnte jemand das erklären?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage