1
fay 2011-02-15 12:45:45 +08:00
http读超时,因为间歇性的访问,每次初始时需要建立连接阿,握手阿,慢启动阿,需要的时间较长,之后因为保持着连接的关系,不会出现超时。
|
2
nttdocomo OP 但我在浏览器看等待响应时间才900ms,GAE控制面板里响应时间也不到一秒?这也算超时?
|
3
nttdocomo OP http://python-top.appspot.com/?v=2.0&format=json&api_key=12194636&sercetoCode=sandboxe3c769026106bd2bf2243a7ce&method=taobao.items.get&q=a&callback=jsonp1297763597387
这是url,每隔几分钟,访问一次,都会返回空白,应该不是超时,因为超时是30秒,我的等待时间还不到一秒 |
4
nttdocomo OP 最新发现,本地测试也出现这种情况,在每次测试服务器重启的第一个请求!
|
5
keakon 2011-02-16 01:03:12 +08:00
@nttdocomo 出现这种情况,一般是main函数没有执行。检查一下有没有写if __name__ == '__main__': main()
|
6
nttdocomo OP 基本上可以确定,是由于:
import sys reload(sys) sys.setdefaultencoding('utf8') 引起的,但不这样,上传到服务器之后就会出现编码错误! |
7
nttdocomo OP 没有上面那段话,当请求中有中文的时候,在服务器端会抛出这个错误
<pre>Traceback (most recent call last): File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", line 515, in __call__ handler.get(*groups) File "/base/data/home/apps/python-top/1.348380308848656335/main.py", line 12, in get itemget.fetch() File "/base/data/home/apps/python-top/1.348380308848656335/taobaoapi2/base.py", line 160, in fetch self._sign() File "/base/data/home/apps/python-top/1.348380308848656335/taobaoapi2/base.py", line 157, in _sign src = sercetCode + ''.join(["%s%s" % (k, v) for k, v in sorted(self.p.items())]) UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128) </pre> |
8
keakon 2011-02-16 10:36:33 +08:00
@nttdocomo 处理中文不需要setdefaultencoding,自己进行decode就行了。
简单来说,把(k, v) for k, v改成(k.decode('utf8'), v.decode('utf8')) for k, v |
9
darasion 2011-02-16 10:57:06 +08:00
不知道啥原因。
如果是超时的原因, 则可以尝试重试。原理是当发生超时异常时,就在except部分重新发出请求(类似递归)。重试次数X每次重试的时间 必须小于等于 一次请求的限制时间。 |
10
nttdocomo OP 搞定!折腾了两天!
|