大家好,我是python 新手,主要为了练习一下python 网络编程。所以自己试着封装了一个memcache的http接口,就用了2个模块 httpserver 和cgi 代码如下:
https://gist.github.com/1500628
这个基本是依葫芦画瓢来的。但是我发现 我每次请求一次这个接口,无论是add,delete 还是get 都差不多需要2秒的时间。每次的时间固定在2.007s 2.006s 左右
[root@
esf ~]# time curl -F "authkey=aaa" -F "action=get" -F "cachekey=wumin"
http://10.10.93.16:801
bs2
real 0m2.007s
user 0m0.001s
sys 0m0.003s
我想知道为什么会出现这种情况。如果我直接用pylibmc操作memcache 是很快的。包了一层http接口会慢一点点。但是也不至于这么慢啊。网上说cgi.FieldStorage处理上传文件很慢。但我这个根本不上传文件。只是从post的数据中拿几个参数出来 对memcache做操作而已.
我网上搜索了一些profile 工具(hotshot),我对程序也进行了一次profile。但是发现耗时的地方竟然是 基础库socketserver里的readline。到这里我就不知道如何做了。请大家指点一下。
ncalls tottime percall cumtime percall filename:lineno(function)
21 1.997 0.095 1.997 0.095 /usr/local/lib/python2.6/socket.py:373(readline)
以下是我的profile的完整输出:
http://dpaste.com/675668/
我尝试过网上说的一些可能解决办法。比如重写BaseHTTPServer 里反向解析客户端IP的那段代码:
host, port = self.client_address[:2]
# return socket.getfqdn(host)
return host
还是没有效果。请指教一下。这问题到底出在哪里。