1

我的 AppEngine 应用程序使用 urlfetch 访问我在办公桌下的计算机上运行的 Web 服务器。有时,调用失败并出现以下错误,我希望你能帮助我:

错误:[Errno 35] 资源暂时不可用

特此,具体情况。

对 urlfetch 的调用在任务内部运行,并且是:

r = urlfetch.fetch( URL,
                    payload = urllib.urlencode( { selector: ','.join(records),
                                                  'reason': explain_request,
                                                } ),
                    method = urlfetch.POST,
                    deadline = 600,
                  )

一些观察:

  • 当记录列表很长时(例如,“加入”后的 100 KB),调用通常会失败,而当列表很短时调用会成功。(注意:我没有超过 urlfetch 请求的大小限制,根据这个页面是 10 MB 。)

  • 我只在 GAE 开发环境中尝试过,从未在 GAE 本身上部署过。

  • 当我在与我的 GAE 开发环境相同的计算机上运行服务器时,urlfetch 调用总是成功的。

至于我桌下电脑上的服务器:

  • 它没有响应缓慢。计算它的响应需要不到一秒钟,或者可能只是超过一秒钟。就好像 GAE 不等待响应一样。

  • 与GAE开发环境计算机整体通过Internet(即非内网)连接

  • 我第一次使用 Python 的 SimpleHTTPServer 实现了它。

  • 我第二次使用 CherryPy 实现了它。我对 CherryPy 的默认配置所做的唯一更改是设置端口并将 server.socket_host 设置为“0.0.0.0”。

根据我在网上读到的关于阻塞和非阻塞服务器的内容,接下来我会尝试使用像 Tornado 这样的显式异步服务器来实现服务器。

但是截至昨天,阻塞和非阻塞对我来说是新概念,所以我希望有真正理解的人可以指出我对这个问题的更直接的攻击。

谢谢你。


2013 年 5 月 28 日添加:嗯,我从来没有发现问题或解决方法,但我提供了另外两个线索,以防将来有人解决它:(1)它在部署到 GAE 时没有出现,(2)这个问题似乎更多地与 POST 参数的大小有关,而不是与桌面下服务器的响应有关。

4

0 回答 0