[翻译]Go 和 Python 的 Web 服务器性能对比

原文在此:http://ziutek.github.com/web_bench/ 由于是早上看到 鱼哥,在推上的推荐,我实在忍不住……这是中午的草率之举,所以 鱼哥 对本文的翻译负全责。 PS:别说我工作状态不饱满,我在等丫的程序执行完…… ————翻译分割线———— Go 和 Python Web 服务器性能对比 我通常使用 Python 来构建 Web 应用。一年前,在兴趣的驱使下,我开始学习 Go。 在此期间,我重写了一些原本由 C 开发的 CGI 应用,包括运行于 chroot 环境下的同 thttpd 服务器一起的应用。我开始寻找可以开发易于 chroot、且内置 Web 服务器的独立 Web 应用的工具。那时,我开始玩 web.go 框架、mustache.go 模板、Go 原生 http 包和 GoMySQL 数据库 API。我发现,有 http、mustache.go  GoMySQL 包的 Go 可以是我用来工作的不错的工具组合。因此,我决定使用 Go 编写我的应用。

python 自身的协程实现?

本来,想给这个随笔起个更眩的名字:《跟随赖神学协程——之一》,原因嘛,自然是因为赖神的协程三篇之一(协程初接触)。不过,怕赖神k我,所以标题党还是朴素一点吧。 至于标题里的问号,是我有意加上去的。原因是在推上赖神认为“python 语言和标准库是不支持协程的(3.x部分支持)”,并且如果 python 自身支持协程,“stackless py 该有多么惭愧啊, :)”(stackless python 的协程详情请看这里)。但是因为 PEP 0342 的描述,令我很迷惑。python 自身是否可以实现协程,这个值得商榷。我不确定,保守点好,给自己个后路走。加个问号吧……如果这不算协程,大家就当我实现了“伪协程”吧。嘿嘿……

Twisted 的 MemcacheProtocol 使用

Twisted 的 defer 是个强大但是诡异的东西,遗憾的是,除了官方文档和这些文档的翻译,其他资料不多。而基于 defer 的客户端协议实现资料就更少了。Memcache 的协议实现也是利用 defer,但是除了一个单元测试的代码外,很难看到其他可以参考的实现。搞了几天,总算是有一个简单的封装,可以避开 defer,无须让所有参与开发的技术人员一定要弄懂 defer 才能用 MemCacheProtocol。 上代码吧,这样封装,应该是比较好理解的……

Netbeans Python 调试,郁闷的包导入问题

这几天在帮忙开发一个 python 项目。使用 netbeans 的时候,遇到一个诡异的问题。 如果使用“运行”来跑项目,一切正常。而如果使用“调试”来跑项目,当执行到 import 第三方的库的时候,就会产生“ImportError: No module named xxxx”。郁闷不已,上网查了半天,没找到可用的信息。 毛主席教育我们“自己动手,丰衣足食”。于是就祭出“观察、归纳和总结”的科学的研究方法,对这个灵异现象进行了一番探索。

脚本语言的配置文件

关于配置文件,在 PHP 的 Zend Framework 中我做过一些简单的关于性能的测试:http://www.mikespook.com/index.php/archives/36。将 ninnypro 的配置文件从 ini 修改为 xml ,并且声称能提高传说中的性能。 最近被调到另外一个在用 python 的组帮忙,阅读了他们的实现服务器端的 python 代码之,配置文件近二十余个,全是 xml 文件。为了使用着些配置文件,从 XMLFile 继承,实现了二十余个 Config 类。 这看起来似乎没什么问题。

Django 1.0.2 mod_python 方式报 TypeError 的解决方法

尝试用 Django 写了一个简单的企业站,部署过程中出了不少问题,不过还好都一一解决了。 “激动不已”的看到了首页,长出一口气:“总不会再出什么其他问题了吧!”随手点了一个内部链接: ————————————————— TypeError at about ‘NoneType’ object is not iterable ————————————————— 这回可晕倒了,怎么会有这样一个错误? 接着往下看,发现错误是由于丢失了一个反斜线引起的: Request Method: GET Request URL: http://www.i-fang.comabout Exception Type: TypeError Exception Value: ‘NoneType’ object is not iterable Exception Location: /usr/lib/python2.5/site-packages/django/core/handlers/base.py in get_response, line 77 Python Executable: /usr/bin/python Python Version: 2.5.2 Python Path: [‘/home/www/www.i-fang.com/’, ‘/usr/lib/python25.zip’, ‘/usr/lib/python2.5’, ‘/usr/lib/python2.5/plat-linux2’, ‘/usr/lib/python2.5/lib-tk’, ‘/usr/lib/python2.5/lib-dynload’, ‘/usr/local/lib/python2.5/site-packages’, ‘/usr/lib/python2.5/site-packages’, …

TurboGears 学习笔记-控制器

这部分内容虽然不多,但是看了好多天。 在 tgadmin 自动生成的 appname/appname/controller.py 中有如下代码: 1 import turbogears as tg 2 from turbogears import controllers, expose, flash 3 from cherrypy import request 4 # from sandbox import model 5 # import logging 6 # log = logging.getLogger(“sandbox.controllers”) 7 8 class Root(controllers.RootController): 9 @expose(template=“sandbox.templates.welcome“) 10 def index(self): 11 import time 12 # log.debug(“Happy TurboGears Controller …

TurboGears 学习笔记-安装

Zope3 很强大,但是一直徘徊在 python 2.4 不升级。学习的兴趣骤减。Django 版本一直停滞在 0.96 不前。据说 12 月会出 1.0,但是兼容性似乎不能保障。偶然的机会看到一篇 TurboGears 的文章,似乎停简单。于是乎,先学安装。 TurboGears 的安装已经简单到了及至:easy_install turbogears。 在 ubuntu 下使用 easy_install 这个命令需要安装 python-setuptools 这个包。 在终端中执行 tg-admin 这个命令,一切正常,除了会有一个警告:UserWarning: Your installation of Python doesn’t have a profile module.原来还需要安装 python-profiler 这个包,使用 apt-get 安装之后,这个警告就不会再出现了。 使用 tg-admin quickstart 生成一个项目,比如 sandbox。进入自动生成的 sandbox 目录,执行命令 ./start-sandbox.py 一切 OK,只要 8080 端口没有被占用,TurboGears 就正常启动了。 在开发模式下,如果需要修改 8080 端口,找到 …