【问题标题】:Python HTTP Server available for Multiple Requests可用于多个请求的 Python HTTP 服务器
【发布时间】:2011-10-02 22:49:25
【问题描述】:

我一直在对 BaseHTTPServer 进行大量研究,发现它对于多个请求并不是那么好。我浏览了这篇文章 http://metachris.org/2011/01/scaling-python-servers-with-worker-processes-and-socket-duplication/#python

我想知道为多个请求构建 HTTP 服务器的最佳方式是什么 ->

我对 HTTP 服务器的要求很简单—— - 支持多个请求(每个请求可能运行一个 LONG Python 脚本)

到目前为止,我有以下选项 -> - BaseHTTPServer(带线程不好) - Mod_Python(Apache 集成) - 樱桃派? - 还有其他吗?

【问题讨论】:

    标签: python httpserver


    【解决方案1】:

    CherryPy 网络服务器让我非常幸运,它是最古老、最可靠的纯 Python 网络服务器之一。只需将您的应用程序编写为 WSGI 可调用文件,它应该很容易在 CherryPy 的多线程服务器下运行。

    http://www.cherrypy.org/

    【讨论】:

      【解决方案2】:

      确实,标准 python 库提供的 HTTP 服务器仅用于轻型用途;对于适度扩展(100 个并发连接),apache 中的mod_wsgi 是一个不错的选择。

      如果您的需求大于此(10,000 个并发连接),您将需要查看异步框架,例如 Twisted 或 Tornado。异步应用程序的一般结构是完全不同的,所以如果你认为你可能需要走这条路,你绝对应该从一开始就在其中一个框架中开始你的项目

      【讨论】:

        【解决方案3】:

        Tornado 是 FriendFeed/Facebook 开发的一个非常好用且易于使用的异步事件循环/网络服务器。我个人有过很好的经验。您可以使用如下示例中的 HTTP 类,或者仅使用 io-loop 来多路复用纯 TCP 连接。

        import tornado.ioloop
        import tornado.web
        
        class MainHandler(tornado.web.RequestHandler):
            def get(self):
                self.write("Hello, world")
        
        application = tornado.web.Application([
            (r"/", MainHandler),
        ])
        
        if __name__ == "__main__":
            application.listen(8888)
            tornado.ioloop.IOLoop.current().start()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-23
          相关资源
          最近更新 更多