为什么每几分钟我的请求都会返回空?

2011-02-15 11:12:53 +08:00
 nttdocomo
用python在GAE上搭了一个TOP(淘宝开放平台)的代理,返回jsonp格式的数据,但每几分钟(5-10分钟)访问一次,就会出现第一次访问会返回空。本地SDK开发没有问题,上传上去就会出现这种问题。请问为什么呢?

额热切本地开发没有编码问题,上传到服务器就会出现编码问题!
5295 次点击
所在节点    Google App Engine
10 条回复
fay
2011-02-15 12:45:45 +08:00
http读超时,因为间歇性的访问,每次初始时需要建立连接阿,握手阿,慢启动阿,需要的时间较长,之后因为保持着连接的关系,不会出现超时。
nttdocomo
2011-02-15 15:01:52 +08:00
但我在浏览器看等待响应时间才900ms,GAE控制面板里响应时间也不到一秒?这也算超时?
nttdocomo
2011-02-15 18:01:14 +08:00
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秒,我的等待时间还不到一秒
nttdocomo
2011-02-15 21:59:09 +08:00
最新发现,本地测试也出现这种情况,在每次测试服务器重启的第一个请求!
keakon
2011-02-16 01:03:12 +08:00
@nttdocomo 出现这种情况,一般是main函数没有执行。检查一下有没有写if __name__ == '__main__': main()
nttdocomo
2011-02-16 08:47:51 +08:00
基本上可以确定,是由于:
import sys
reload(sys)
sys.setdefaultencoding('utf8')

引起的,但不这样,上传到服务器之后就会出现编码错误!
nttdocomo
2011-02-16 09:02:38 +08:00
没有上面那段话,当请求中有中文的时候,在服务器端会抛出这个错误
<pre>Traceback (most recent call last):
File &quot;/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/__init__.py&quot;, line 515, in __call__
handler.get(*groups)
File &quot;/base/data/home/apps/python-top/1.348380308848656335/main.py&quot;, line 12, in get
itemget.fetch()
File &quot;/base/data/home/apps/python-top/1.348380308848656335/taobaoapi2/base.py&quot;, line 160, in fetch
self._sign()
File &quot;/base/data/home/apps/python-top/1.348380308848656335/taobaoapi2/base.py&quot;, line 157, in _sign
src = sercetCode + ''.join([&quot;%s%s&quot; % (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>
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
darasion
2011-02-16 10:57:06 +08:00
不知道啥原因。

如果是超时的原因,
则可以尝试重试。原理是当发生超时异常时,就在except部分重新发出请求(类似递归)。重试次数X每次重试的时间 必须小于等于 一次请求的限制时间。
nttdocomo
2011-02-16 12:52:27 +08:00
搞定!折腾了两天!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/8509

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX