gpt4 book ai didi

python - Bottle 的内置 WSGI 服务器与标准 Python wsgiref 服务器模块有何不同?

转载 作者:太空宇宙 更新时间:2023-11-03 17:00:48 24 4
gpt4 key购买 nike

Bottle 在 Python 内置的 wsgiref 服务器实现中做了什么 WSGIref简单的服务器不?例如,当我查看 Bottle 时,它​​遵循 WSGI 标准,并且文档指出:

1.5.1 Server Options The built-in default server is based on wsgiref WSGIServer. This non-threading HTTP server is perfectly fine for development and early production, but may become a performance bottleneck when server load increases.
There are three ways to eliminate this bottleneck:

  • • 使用不同的多线程或异步服务器。
  • • 启动多个服务器进程并使用负载平衡器分散负载。
  • • 两者都做 [强调我的]

然而,我读到的所有内容都表明不要使用 Python wsgrief 服务器进行任何生产。

Bottle 对 wsgrief 做了哪些 Python 内置 wsgiref 没有做的事情?我并不是真的质疑使用异步服务器或“更大”更“可扩展”的 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

最佳答案

编辑:

What is Bottle doing in its wsgiref server implementation that the built in Python WSGIref simple server is not?

What does Bottle do with wsgrief that the built in Python wsgiref does not?

没有任何(实质内容)。

<小时/>

不确定我是否理解你的问题,但我会尽力提供帮助。

我感到困惑的原因是:您发布的代码片段准确地回答了[我认为是]您的问题。 Bottle 的 WSGIRefServer 类除了包装 wsgiref.simple_server 之外没有做任何实质性的事情。 (我称日志记录和 IPv6 调整无关紧要,因为它们与“生产就绪性”无关,而我认为“生产就绪性”是您问题的核心。)

您是否可能误解了文档?我想也许是的,因为你说:

I'd like to know what Bottle is doing with the wsgiref server that makes it okay for "early Production," the regular library does not.

但是 Bottle 文档指出 Bottle 的 WSGIRefServer 不应该用于处理高吞吐量负载。

换句话说,WSGIRefServerwsgiref 相同,而我认为您将文档解释为前者在某种程度上得到了改进超过后者。 (事实并非如此。)

希望这有帮助!

关于python - Bottle 的内置 WSGI 服务器与标准 Python wsgiref 服务器模块有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35018668/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com