首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >瓶子内置的WSGI服务器与标准Python服务器模块有何不同?

瓶子内置的WSGI服务器与标准Python服务器模块有何不同?
EN

Stack Overflow用户
提问于 2016-01-26 16:22:53
回答 1查看 1.8K关注 0票数 1

瓶子在它的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

这是瓶子的实现,至少是打开端口:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-27 14:22:32

编辑:

瓶子在它的wsgiref服务器实现中做了什么,而在Python中构建的却不是? 在中构建的瓶子对wsgrief有什么作用呢?

没有(实质性的)。

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

造成我困惑的原因是:您发布的代码片段准确地回答了我认为是您的问题。瓶子的WSGIRefServer类除了包装wsgiref.simple_server外,什么都不做。(我打电话给日志记录,而IPv6的调整不太重要,因为它们与“生产准备状态”无关,我认为这是您问题的核心。)

你有没有可能曲解了这些文档?我想也许是的,因为你说:

我想知道wsgiref服务器是做什么用的,这使得它可以“早期生产”,而普通的库却不这样做。

但是,瓶子文档表明,不应该使用瓶子的WSGIRefServer来处理高吞吐量负载。

换句话说,WSGIRefServerwsgiref是一样的,而我认为您将文档解释为前者在某种程度上优于后者。(不是。)

希望这能有所帮助!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35018668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档