`
phyeas
  • 浏览: 164205 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

在Python3.0中处理web请求4-回归WSGI

阅读更多

前面一直使用HTTPServer对web请求进行处理,今天突然想能不能改下,用python3提供的wsgiref进行处理,原来的程序:

from wsgiref.simple_server import make_server

def hello_world_app(env,start_response):
    start_response("200 OK",[("Content-type","text/plain;charset=utf-8")])
    return ["Hello World!!"]

if __name__ == "__main__":
    httpd=make_server('',8080,hello_world_app)
    httpd.handle_request()

 

问题并不在这个程序,异常报的是在write的时候,于是,要改的就是write,改哪里呢?

就改ServerHandler

这个类在wsgiref包里的simple_server.py模块中(Lib/wsgiref/simple_server.py)

原来的ServerHandler是:

class ServerHandler(SimpleHandler):

    server_software = software_version

    def close(self):
        try:
            self.request_handler.log_request(
                self.status.split(' ',1)[0], self.bytes_sent
            )
        finally:
            SimpleHandler.close(self)

 重写_write方法即可:

class ServerHandler(SimpleHandler):

    server_software = software_version

    def close(self):
        try:
            self.request_handler.log_request(
                self.status.split(' ',1)[0], self.bytes_sent
            )
            self.buf_data.seek(0)
            shutil.copyfileobj(self.buf_data,self.stdout)
        finally:
            SimpleHandler.close(self)

    def _write(self,data):
        if not hasattr(self,"buf_data"):
            self.buf_data=io.BytesIO()
        if type(data) is str:
            data=data.encode("UTF-8")
        self.buf_data.write(data)

 大功告成。

测试  http://localhost:8080,Hello World出来了!

 

为了方便调试,这里的编码直接写UTF-8了。各位根据自己的需要配置。。

如果需要使用多线程处理,可以用上一篇文章提到的ThreadingMixIn即可。

分享到:
评论

相关推荐

    Python库 | financeager_flask-0.3.3.0-py3-none-any.whl

    Flask是一个轻量级的Web服务程序,它基于Werkzeug WSGI工具包和Jinja2模板引擎构建,因其简洁易用的特性在Python Web开发中广受欢迎。这个库将financeager与Flask框架集成,旨在提供一套高效、灵活的金融数据处理和...

    Python库 | simple-api-management-wsgi-0.1.1.tar.gz

    在实际应用中,`simple-api-management-wsgi-0.1.1`可以与其他WSGI兼容的Web服务器(如uWSGI、Gunicorn等)结合使用,通过这些服务器将API接口暴露给网络。同时,它也可以与其他Python库(如Flask、Django等Web框架...

    16-WSGI、mini-frame(web框架)(python和linux高级编程阶段 代码和截图)

    16-WSGI、mini_frame(web框架)(python和linux高级编程阶段 代码和截图)16-WSGI、mini_frame(web框架)(python和linux高级编程阶段 代码和截图)16-WSGI、mini_frame(web框架)(python和linux高级编程阶段 ...

    Python库 | necrophos-wsgi-0.0.1.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:necrophos-wsgi-0.0.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | WSGIserver-1.0-py2.py3-none-any.whl

    本文将深入探讨Python中的WSGI(Web Server Gateway Interface)服务器及其在WSGIserver-1.0-py2.py3-none-any.whl这个特定库中的应用。WSGI是Python Web应用程序与Web服务器之间的一个接口标准,它定义了如何处理...

    python 2.7-mod_wsgi-win32-ap22py27-3.3.so

    Python 2.7 和 mod_wsgi-win32-ap22py27-3.3.so:在Web开发领域,Python是一种流行的脚本语言,而Apache是广泛应用的HTTP服务器。当需要在Apache服务器上运行Python应用程序时,mod_wsgi模块扮演着关键角色。`mod_...

    python27-mod_wsgi-3.4-13.el7.x86_64.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    Python学习笔记-WSGI接口

    在Python web开发中,WSGI(Web Server Gateway Interface)是一种标准接口,用于web服务器与web应用之间的通信。这个接口定义了一种规范,使得不同的服务器和应用程序可以协同工作,提高了代码的可移植性和灵活性。...

    python3-mod_wsgi-4.6.4-4.el8.x86_64.rpm

    官方离线安装包,亲测可用

    Python库 | rc-webserver-33.0.189.tar.gz

    安装完成后,可以在Python代码中导入并根据文档或示例配置和启动Web服务器。 总之,rc-webserver是一个专为Python设计的Web服务器库,它提供了构建Web服务所需的基本功能,并且可能具有高度可定制性和扩展性,以...

    Python库 | buildbot-wsgi-dashboards-1.5.0.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:buildbot-wsgi-dashboards-1.5.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | necrophos-wsgi-0.0.4.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:necrophos-wsgi-0.0.4.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    python3-mod_wsgi-4.6.4-4.el8.aarch64.rpm

    官方离线安装包,亲测可用

    Python-AtinyWSGIwebframework一个WSGIWeb框架Python35

    5. **中间件**:中间件是WSGI框架中一种强大的功能,它们可以在请求到达应用和应用发送响应之间插入额外的处理逻辑。这可以用于日志记录、身份验证、性能监控等多种用途。 6. **轻量级**:Python-...

    mod_wsgi python开发

    - **daemon模式**:更推荐的方式,`mod_wsgi`会在单独的进程组(daemon进程)中运行Python应用,每个进程可以处理多个请求,提高了并发能力。这种模式更适合大型、高流量的应用。 **3. mod_wsgi的安装与配置** - ...

    mod-wsgi-3.5-for-windows32/64-apache2.2/2.4-python2.6-3.4各版本组合都有

    mod_wsgi-3.5-for-windows32/64-apache2.2/2.4-python2.6-3.4各版本组合都有。总有一款适合你。 详见列表: mod_wsgi-3.5.ap22.win32-py2.6.zip mod_wsgi-3.5.ap22.win32-py2.7.zip mod_wsgi-3.5.ap22.win32-py3.2....

    Python一日一练102----创建简易博客(下)源码

    在本篇【Python一日一练102----创建简易博客(下)】的教程中,我们将深入探讨如何使用Python编程语言构建一个简单的博客系统。这个教程可能是基于Django框架进行的,因为Django是Python中广泛用于Web开发的高级框架...

    openstack安装包(二)

    mod_wsgi-3.2-3.el6.x86_64.rpm mysql-5.1.73-3.el6_5.x86_64.rpm mysql-libs-5.1.73-3.el6_5.x86_64.rpm MySQL-python-1.2.3-0.3.c1.1.el6.x86_64.rpm mysql-server-5.1.73-3.el6_5.x86_64.rpm nc-1.84-22.el6.x86_...

    python-nginx-example-app-源码.rar

    6. **Gunicorn 或 uWSGI**:在 Python 应用和 Nginx 之间,通常会有一个 WSGI 服务器,如 Gunicorn 或 uWSGI,它们接收 Nginx 转发的请求并处理 Python 应用的业务逻辑。 7. **虚拟环境**:为了保持项目依赖的隔离...

Global site tag (gtag.js) - Google Analytics