谁说gevent不能做web开发的?

feimat 发布于 2016/03/16 13:39
阅读 698
收藏 2
fastpy是一个对gevent进行易用性封装的 高性能web框架,
其充分利用了gevent协程的特点,使得原本的mysql与http请求实现自动同步转异步。
从而达到使用简单但性能高效的特点。


源代码只有800多行


性能比较如下


tornado 4kqps 多进程1wqps 
nginx+tornado 9kqps
nginx+uwsgi 8kqps (注意:没说比nginx快,只是这几个web框架不行) 


django和webpy 性能不是一个级别的


本server 2w qps 
没用任何python加速


已经真实使用到自己的多个项目之中,效果明显
欢迎加入it民工qq群339711102,一起探讨优化哦






用户文档:


1、启动:
   指定监听端口即可启动
   python fastpy.py 8992 
   (如果需要使用gevent协程功能请先安装gevent,参考链接http://www.xue163.com/exploit/138/1381297.html)


2、快速编写cgi,支持运行时修改,无需重启server


   在fastpy.py同一目录下
   随便建一个python 文件
   例如:
   example.py:
   #-*- coding:utf-8 -*-
   import sys
   #定义一个同名example类
   #定义一个tt函数:
   reload(sys)
   sys.setdefaultencoding('utf8')
   FastpyAutoUpdate=True
   class example():
       def tt(self, request, response_head):
           #print request.form
           #print request.getdic
           #fileitem = request.filedic["upload_file"]
           #fileitem.filename
           #fileitem.file.read()
           return "ccb"+request.path


   则访问该函数的url为 http://ip:port/example.tt
   修改后保存,即可访问,无需重启
   FastpyAutoUpdate 属性可控制需不需要热部署
   FastpyAutoUpdate=true 支持热部署,修改无需重启
   FastpyAutoUpdate=false 则不支持热部署,修改需要重启
   tt函数必须带两个参数
   request:表示请求的数据 默认带以下属性
      headers: 头部 (字典)
      form:  post参数,包括form表单 (字典)
      getdic: url参数 (字典)
      filedic: form表单中文件 (字典)
      rfile: 原始http content内容  (字符串)
      action: python文件名 (这里为example)
      method: 函数方法    (这里为tt)
      command:  (get or post)
      path: url (字符串)
      http_version: http版本号 (http 1.1)
   response_head: 表示response内容的头部
      例如如果要返回用gzip压缩
      则增加头部
      response_head["Content-Encoding"] = "gzip"
      
    除了直接return作为response内容外
    fastpy还
    支持 request.ret(500,res) 的方式返回错误码和内容,
    支持 request.printChunk("print subcontent: xxx") 返回chunk局部内容
         request.flushChunk()结束chunk返回
        
    在WithGevent目录里 我们提供了协程方式的例子,
    将同步的调用(如访问mysql和发http等)变成异步(为什么这样读者可以查询gevent spawn原理, 
    里面提供协程下转发http和数据库连接池的例子)
    
    cgi所有使用例子:
    sample.py  上传文件和form表单使用等基本api的例子
    example.py 使用单例模式和线程+异步返回的例子
    WithGevent/dbsample.py  使用gevent+pymysql实现异步读写数据库的例子(gevent下线程池实现)
    WithGevent/sample.py    使用gevent实现异步发送http请求的例子
    sendfile/sendfile.py         多线程文件上传服务端代码
    sendfile/sendfile_client.py  多线程文件上传客户端代码
    proxy_server/proxy.py        正向代理服务器代码
    跨平台/   跨平台版本的fastpy.py 


3、支持超大文件上传下载
   默认静态文件(包括html,js、css、图片、文件等)放在static文件夹下
   html和js、css会自动压缩加速
   例如把a.jpg放到static文件夹下
   访问的url为 http://ip:port/static/a.jpg
   支持etag 客户端缓存功能
   (server 使用sendfile进行文件发送,不占内存且快速)


4、支持网页模板编写
   创建一个模板 template.html
   <HTML>
       <HEAD><TITLE>$title</TITLE></HEAD>
       <BODY>
           $contents
       </BODY>
   </HTML>


   则对应的函数:
   def template(request,response_head):
       t = Template(file="template.html")
       t.title  = "my title"
       t.contents  = "my contents"
       return str(t)
   模板实现使用了python最快速Cheetah开源模板,
   性能约为webpy django thinkphp等模板的10倍以上:
   http://my.oschina.net/whp/blog/112296


5、支持http/https透明代理
   python proxy.py 8995
   启动后再浏览器配置代理即可使用,可以弥补nginx 不支持https代理的不足
加载中
返回顶部
顶部