美文网首页
CherryPy框架分析与基础

CherryPy框架分析与基础

作者: 狐仙大人_ | 来源:发表于2018-10-10 11:08 被阅读0次

应用实例

hello.py

import cherrypy 

class Root(object):
    @cherrypy.expose
    def index(self):
        return "Hello World!"
 
if __name__ == '__name__':
    cherrypy.quickstart(Root(), '/')

  正如cherrypy.quickstart(Root(),'/')是在“/”枯井上启动内置的HTTP服务器服务。
  正如@cherrypy.expose()是将该方法暴露,使得其能被Cherry调用。
  CherryPy是一个专注于单一任务的小框架;接受HTTP请求,并找到与请求URL匹配的Python函数或者方法。
  Cherry不提供对数据库访问,HTML模板或任何其他中间件功能的内置支持。

CherryPy框架

   支撑运行Hello World的CherryPy的框架大致如下图所示,图中的节点名称是CherryPy中的类名。


CherryPy框架.png

   当一个请求发生时,首先到达的是CPWSGIServer,CPWSGIServer基于socket,win32下对应的底层支持module是process/win32.py。由于CherryPy支持WSGI接口的应用,故CPWSGIServer也能支撑WSGI应用。

   CPWSGIServer会将每个请求封装成一个HTTPConnection,然后扔到队列Queue里面,由ThreadPool中的WorkerThread来处理,处理方式很简单,就是ThreadPool启动多个WorkerThread,每个WorkerThread去Queue中取HTTPConnection,然后处理之。CherryPy中,可以设置WorkerThread的个数。 \color{red}{(也就是说我们可以修改WorkerThread的个数,自定义同时处理多条HTTP请求的指令)}

  ThreadPool模块和_cp开头的module的交互是通过_cpserver.Server,它只是一个Adapter,包装了底层的Server类。HTTPConnection会将消息转发到_cptree.Tree,该类中记载了站点的相对路径(比如“/”)和对应的Application之间的对应关系,那么它会跟据不同的URL请求转到对应的Application中。

  Application中则封装了用户定义的类HelloWorld对象,故在需要返回数据给客户端时,调用到HelloWorld中。

单一应用

  最直接的方法是使用cherrypy.quickstart()功能。他需要至少一个参数,即应用程序的实例。另外还有两个可选参数。
  第一个是应用程序可以访问的基本路径。第二个是一个配置字典或文件用来配置所托管的应用程序。

cherrpy.quickstart(Blog())  
cherrpy.quickstart(Blog(), '/blog')  
cherrpy.quickstart(Blog(), '/blog', {'/': {'tools.gzip.on': True}})

  第一个例子意味着你的应用程序将在http://hostname:port/ 下可用, 而另外两个将使你的应用程序可在http://hostname:port/blog 上使用。
  第三种情况下,设置相对于应用程序,而不是在哪里可用, 所以是{'/': ...} 而不是{'/blog': ...}
  cherrypy.quickstart()方法对于单个应用程序是好用的,但是缺乏使用服务器托管多个应用程序的能力。

多应用程序

  要实现托管多应用程序的能力,需要使用cherrypy.tree.mount 功能:

cherrypy.tree.mount(Blog(), '/blog', blog_conf)
cherrypy.tree.mount(Forum(), '/forum', forum_conf)
cherrypy.engine.start()
cherrypy.engine.block()

  本质上, cherrypy.tree.mount 使用和cherrypy.quickstart 相同的参数: 应用程序实例, 托管路径, 配置字典。 最后两行只是启动服务器。
  除此之外Cherrypy还可以托管外部WSGI应用程序。

  

相关文章

网友评论

      本文标题:CherryPy框架分析与基础

      本文链接:https://www.haomeiwen.com/subject/okxpaftx.html