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

时间:2013-05-23 19:48:58

标签: google-app-engine sockets blocking urlfetch

我的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)时,调用通常似乎失败,而当列表很短时,调用成功。 (N.B。:我没有超过urlfetch请求的大小限制,根据this page,这是10 MB。)

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

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

至于桌面下计算机上的服务器:

  • 没有慢慢回应。计算其响应需要不到一秒,或者可能只需要一秒钟。就像GAE不等待回应一样。

  • 它通过互联网整体连接到GAE开发环境计算机(即不是内联网)

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

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

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

但截至昨天,封锁和非封锁对我来说都是新概念,所以我希望有真正理解的人可以指点我对这个问题进行更直接的攻击。<​​/ p>

谢谢。


2013年5月28日添加:好吧,我从来没有弄清楚问题或解决方法,但我提供了两条线索,以防万一有人在将来处理它:(1)部署到GAE时没有出现, (2)问题似乎与POST参数的大小有关,而不是桌面服务器的响应。

0 个答案:

没有答案