什么是瓶子在其wsgiref服务器实现中做的内置Python WSGIref简单服务器不是?例如,当我查看Bottle时,它遵循WSGI标准并且文档声明:
1.5.1服务器选项内置的默认服务器基于wsgiref WSGIServer。这个非线程的HTTP服务器非常适合 开发和早期生产,但可能会成为一种表现 服务器负载增加时的瓶颈 有三种方法可以消除这个瓶颈:
- •使用多线程或异步的其他服务器。
- •启动多个服务器进程并使用负载均衡器分散负载。
- •两者都做 [强调我的]
然而,我读过的所有内容都表示不要将Python wsgrief服务器用于任何生产。
使用内置Python wsgiref不具备的wsgrief做什么?我并没有真正质疑使用异步服务器的智慧,或者更大的"更大的"更多"可扩展" WSGI服务器。但是,我想知道Bottle正在使用wsgiref服务器做什么,这使得它可以早期生产,"普通图书馆没有。
我的应用程序只能为不到20人点击PostgreSQL或MySQL数据库CRUD操作。我想你可以向Flask提出类似的问题。
供参考,
http://bottlepy.org/docs/dev/bottle-docs.pdf [pdf] https://docs.python.org/2/library/wsgiref.html#module-wsgiref.simple_server https://github.com/bottlepy/bottle/blob/master/bottle.py
这是Bottle的实现,至少是为了打开端口:
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
答案 0 :(得分:1)
编辑:
什么是瓶子在其wsgiref服务器实现中做的内置Python WSGIref简单服务器不是?
使用内置Python wsgiref不具备的wsgrief做什么?
没有(实质内容)。
我不确定我理解你的问题,但我会尝试帮助。
我混淆的原因是:您发布的代码段正好回答了[我认为]您的问题。除了WSGIRefServer
之外,Bottle wsgiref.simple_server
类没有任何实质内容。 (我称之为日志记录和IPv6调整不实际,因为它们与"生产准备无关,"我收集的是你问题的核心。
您是否可能误解了文档?我想也许是的,因为你说:
我想知道Bottle正在使用wsgiref服务器做什么,这使得#34;早期生产,"普通图书馆没有。
但是Bottle文档正在指出Bottle的WSGIRefServer
不应该用于处理高吞吐量负载。
换句话说,WSGIRefServer
与wsgiref
相同/相同,而我认为你解释说文档说前者在某种程度上比后者有所改进。 (事实并非如此。)
希望这有帮助!