Tornado生产骨架——mownfish介绍

原创 2013年12月03日 15:39:05

曾经给大家介绍了许多优秀的开源项目,今天为大家介绍我的在githup上开源的一个tornado生产骨架——mownfish(https://github.com/Ethan-Zhang/mownfish),欢迎大家拍砖~


Tornado是用python写的一个基于linux epoll的异步非阻塞IO实时框架,最早产生于FriendFeed,09年被Facebook收购并开源。这个框架被广泛的应用于互联网实时信息处理领域,如long polling、websocket等。将晦涩难以理解的linux epoll的相关操作封装在了IOLoop,IOStream等模块中,方便开发者更快捷的使用linux epoll的异步非阻塞IO。其代码结构和运行效率都像她的名字一样,tornado——龙卷风,轻量、迅捷、快速。然而如此强大的框架也有许多不足之处,因为其依赖异步非阻塞的IO工作方式,如果代码内有IO操作阻塞了进程,将会使整个服务不能响应。所以就需要我们使用的相关涉及网络IO的客户端如MySQL-client等也是支持异步的,这时非常复杂的,因为大部分主流的客户端库都是同步的IO方式。第二,其代码和文档符合Facebook开源项目的一贯风格,基本无文档,注释也很少,需要开发者查看具体的框架代码以理解其实现,不然会有很多的谬用。第三,tornado是以python模块的形式发布了代码,并非像姜哥或者其他的php、rails风格的框架等,自己的应用代码就是直接写在框架内部,也就是说框架已经规范了应用的代码结构。tornado需要自己来实现应用的代码结构,不管是tornado的新手还是老手,在新建一个项目的时候都要或多或少的重复写一些项目的初始化代码,完成代码的骨架。

mownfish的产生就是为了解决代码骨架的问题。mownfish,其名字来源于我工作过的一家公司的logo,一个脸长得非常怪的鱼,我称之为怪脸鱼。mownfish是一个基于tornado的生产骨架,目的是帮助开发者快速、高效、规范的生成一个应用的代码骨架,并增加少量的如log,脚本等功能。


mownfish有以下几个特点:


1.  生产代码骨架。mownfish规范了应用的代码结构。如下图所示,cmd中存放的是应用的启动入口,可以以consol_script的形式在setup打包中创建模块的entry_point。wsgi.py是tornado非阻塞server的基础,创建了http_server以及Application的实例。error.py自定义了用户级别的异常,如参数异常,DB异常等。与周期性定时器相关的代码全部放到timer_task.py中。domain模块中存放和handler或与handler相关的类,domain.__init__中定义了应用的路由信息,以应用名为key组织了字典,在wsgi中进行动态的加载。base_handler.py为自定义的handler的基类,实现了几个参数过滤的方法。util模块中存放log、config以及其他通用的方法,db抽象db相关操作。



2. 提供一个代码框架初始化脚本fishing。通过fishing脚本,可以一键由mownfish部署一个以自己项目名命名的python工程目录,包括日志名,应用路由名等均在脚本中自动修改,并可以自动添加项目权限头。

mownfish/script/fishing $dst_path -n $project_name -l $lisense_file


3. 基于后端服务的响应时间、吞吐量等性能的考量,mownfish选择基于tornado2.4版本进行开发,并没有使用最新的3.1版本。在tornado3.x版本之前还没有默认的log模块,所以mownfish自己实现了一个log模块,提供了一个全局logger,方便对access日志和错误日志等进行记录。


目前这个生产框架已经在实际在几个项目中应用了,应对敏捷开发上还是很明显的。希望能给应用tornado框架开发的人带来便利,欢迎各种在github上提出issue或直接pull request。如果觉得对你有帮助还请在github上留个星。

Tornado+nginx+supervisor 在生产环境上部署

Tornado  Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本,是属于facebook的一个开源项目。Tornado 和现在的主流 Web ...
  • tengzhaorong
  • tengzhaorong
  • 2013年10月17日 10:30
  • 18316

Maven 的41种骨架功能介绍

每次用maven搭建web项目总是不知道选什么,总是百度好麻烦的,直接转一篇博客过来,增加记忆 转载地址:原文地址 Maven 的41种骨架: ...>mvn archetype:g...
  • xiaojie119120
  • xiaojie119120
  • 2017年04月09日 14:03
  • 339

tornado 12、生产模式部署到服务器过程中遇到的一些命令

按照我部署过程的顺序一.linux常见命令创建文件夹: mkdir dirname mkdir /home/dirname 删除文件,夹: rm -rf /home/dirname ...
  • qq_16234613
  • qq_16234613
  • 2016年08月16日 18:20
  • 438

Tornado框架知识系列之一

1,简介Tornado全称Tornado Web Server,是一个用Python语言写成的Web服务器兼Web应用框架,由FriendFeed公司在自己的网站FriendFeed中使用,被Face...
  • u014745194
  • u014745194
  • 2017年08月01日 19:11
  • 421

maven自定义骨架的过程,已经使用详解

maven骨架是骨架插件实现的,整个骨架的流程用下面的整个流程图表示在准确不过了,图来源maven官网。 maven骨架介绍: 使用mave做创建项目的时候,很自然用用到maven自带的骨...
  • qq383264679
  • qq383264679
  • 2016年08月08日 19:45
  • 3830

Tornado的三大核心模块与处理流程

Hello World 下面是 Tornado 官网提供的一个hello world的代码示范,我们来分析下程序的构成。 01 import tornad...
  • cxm19830125
  • cxm19830125
  • 2015年01月12日 22:14
  • 1323

tornado 11、部署生产环境

一、后台运行  一般调试过程中我们使用python app.py运行网站,方便我们在命令行中看运行状况。 但在生产环境下我们需要后台运行网站。我们可以使用linux的nohup命令。nohup py...
  • qq_16234613
  • qq_16234613
  • 2016年08月20日 23:10
  • 1219

HTML学习笔记3:HTML基本骨架详解

HTML基本骨架详解,字符集,关键字,描述
  • sinat_34647836
  • sinat_34647836
  • 2017年01月08日 22:29
  • 662

Maven骨架的使用

maven骨架的使用能够帮我们快速的构建结构一致的项目,省时省力。Maven提供了一些预置的骨架可供我们使用,但毕竟各自需求不一样,这里跟大家介绍下创建和使用自己的骨架。1.构建骨架这里是从一个已有的...
  • QQ1142003960
  • QQ1142003960
  • 2015年12月05日 11:07
  • 1249

将Flask应用程序部署在nginx,tornado的简单方法

在网上搜索了一下部署flask应用的方法,大部分是用wsgi部署在nginx上面,部署了很久,都没有成功,可能是我领悟能力太差,不过服务器上面的环境也够乱的有python2,python3,最后实在折...
  • wang1144
  • wang1144
  • 2013年07月31日 10:59
  • 1488
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Tornado生产骨架——mownfish介绍
举报原因:
原因补充:

(最多只允许输入30个字)