瓶子在它的wsgiref服务器实现中做了什么,而在Python中构建的却不是?例如,当我看瓶子时,它遵循WSGI标准,文档声明:
1.5.1内置默认服务器基于wsgiref WSGIServer的服务器选项。这个非线程HTTP服务器非常适合开发和早期生产的,但当服务器负载增加时,可能会成为性能瓶颈。 有三种方法可以消除这一瓶颈:
然而,我所读到的每一篇文章都说,不要在任何生产中使用Python服务器。
在中构建的瓶子对wsgrief有什么作用呢?我并不真正质疑使用异步服务器或“更大”、更可伸缩的WSGI服务器是否明智。但是,我想知道wsgiref服务器是做什么的,这使得它可以“早期生产”,而普通的库却不这样做。
我的应用程序将为不到20人访问PostgreSQL或MySQL数据库,CRUD操作提供服务。我想你也可以用水瓶问一个类似的问题。
作为参考,
http://bottlepy.org/docs/dev/bottle-docs.pdf pdf格式 https://github.com/bottlepy/bottle/blob/master/bottle.py
这是瓶子的实现,至少是打开端口:
class WSGIRefServer(ServerAdapter):
def run(self, app): # pragma: no cover
from wsgiref.simple_server import make_server
from wsgiref.simple_server import WSGIRequestHandler, WSGIServer
import socket
class FixedHandler(WSGIRequestHandler):
def address_string(self): # Prevent reverse DNS lookups please.
return self.client_address[0]
def log_request(*args, **kw):
if not self.quiet:
return WSGIRequestHandler.log_request(*args, **kw)
handler_cls = self.options.get('handler_class', FixedHandler)
server_cls = self.options.get('server_class', WSGIServer)
if ':' in self.host: # Fix wsgiref for IPv6 addresses.
if getattr(server_cls, 'address_family') == socket.AF_INET:
class server_cls(server_cls):
address_family = socket.AF_INET6
self.srv = make_server(self.host, self.port, app, server_cls,
handler_cls)
self.port = self.srv.server_port # update port actual port (0 means random)
try:
self.srv.serve_forever()
except KeyboardInterrupt:
self.srv.server_close() # Prevent ResourceWarning: unclosed socket
raise发布于 2016-01-27 14:22:32
编辑:
瓶子在它的wsgiref服务器实现中做了什么,而在Python中构建的却不是? 在中构建的瓶子对wsgrief有什么作用呢?
没有(实质性的)。
我不确定我是否理解你的问题,但我会尽力帮助你。
造成我困惑的原因是:您发布的代码片段准确地回答了我认为是您的问题。瓶子的WSGIRefServer类除了包装wsgiref.simple_server外,什么都不做。(我打电话给日志记录,而IPv6的调整不太重要,因为它们与“生产准备状态”无关,我认为这是您问题的核心。)
你有没有可能曲解了这些文档?我想也许是的,因为你说:
我想知道wsgiref服务器是做什么用的,这使得它可以“早期生产”,而普通的库却不这样做。
但是,瓶子文档表明,不应该使用瓶子的WSGIRefServer来处理高吞吐量负载。
换句话说,WSGIRefServer和wsgiref是一样的,而我认为您将文档解释为前者在某种程度上优于后者。(不是。)
希望这能有所帮助!
https://stackoverflow.com/questions/35018668
复制相似问题