Как улучшить производительность комбинации жевента и торнадо?
Я пытаюсь использовать gevent в качестве wsgi-сервера и использовать торнадо WSGIApplication для обработки запросов. Вот код
#!/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()
И я использую Apache Benchmark для тестирования производительности. Тестовая команда
ab -n 1000 -c 100 http://127.0.0.1:9010/
Это приводит к 100req в секунду, это слишком медленно. В приведенном выше коде я просто поместил http-запрос на другую сторону, я думаю, что в этом случае gevent переключится на другой greenlet, когда блокируется, и это должно иметь небольшое влияние на производительность, но производительность gevent снизится с 1600req в секунду до 100 Требуется в секунду, я не могу понять, почему.
Кто-нибудь может объяснить это?