【发布时间】:2020-12-16 00:47:44
【问题描述】:
我正在开发一个在后端有大量计算的网络服务。下面是带有瓶子框架和“Cherrypy”服务器的代码(多线程且非常稳定)。 但是在测试了一段时间后,我觉得它的服务速度没有我预期的那么快。使用“Cherrypy”的代码如下
from bottle import Bottle
import logging.handlers
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
# Logging handler for files
file_handler = logging.handlers.TimedRotatingFileHandler("Log.log", when="midnight", interval=1,
backupCount=10000)
file_handler.setLevel(logging.INFO)
# Formatter's for logging
formatter = logging.Formatter('%(asctime)s %(name)s %(levelname)s %(message)s')
file_handler.setFormatter(formatter)
# Add handlers to the logger
logger.addHandler(file_handler)
class App:
def __init__(self, server, host, port):
self._app = Bottle()
self._host = host
self._port = port
self._server = server
self._route()
def start(self):
self._app.run(server=self._server, host=self._host, port=self._port)
logger.info("Application Started Successfully.")
def _route(self):
self._app.route('/hello/<name>', method="POST", callback=self.hello)
def hello(self, name):
print("hello ", name)
logger.info("completed the response")
if __name__ == '__main__':
server = App(server='cheroot', host='0.0.0.0', port=9999)
server.start()
我正在开发的 Web 服务同时被多个请求调用。 Cherrypy 服务器估计需要 40000 毫秒的响应时间。这是一个巨大的时间。 所以我打算使用“Gevent”服务器(异步)。但我面临一个问题,即多线程(GREENLET)解决相同的请求。代码如下所示
from bottle import Bottle
import logging.handlers
from gevent import monkey
monkey.patch_all()
class App:
def __init__(self, server, host, port):
self._app = Bottle()
self._host = host
self._port = port
self._server = server
self._route()
def start(self):
self._app.run(server=self._server, host=self._host, port=self._port)
logger.info("Application Started Successfully.")
def _route(self):
self._app.route('/hello/<name>', method="POST", callback=self.hello)
def hello(self, name):
print("hello ", name)
logger.info("completed the response")
if __name__ == '__main__':
server = App(server='gevent', host='0.0.0.0', port=9999)
server.start()
单个请求的实际时间是9000ms,所以时间增加到40000ms甚至更多的时间让我选择了gevent。
在其他 GREENLET 处理来自其他机器的其他请求时,如何控制 GREENLET 接受单个请求并以最短时间发送对请求的响应?
【问题讨论】:
标签: python bottle cherrypy gevent