Python 从AppEngine与外部api通信时出现ApplicationError2和ApplicationError5

Python 从AppEngine与外部api通信时出现ApplicationError2和ApplicationError5,python,google-app-engine,python-2.7,httplib,Python,Google App Engine,Python 2.7,Httplib,我已经在google app engine上用python27构建了一个应用程序来连接另一个服务API,总体来说一切都很顺利。我偶尔会遇到以下两个错误中的一个 (<class 'google.appengine.api.remote_socket._remote_socket.error'>, error('An error occured while connecting to the server: ApplicationError: 2 ',), <traceback o

我已经在google app engine上用python27构建了一个应用程序来连接另一个服务API,总体来说一切都很顺利。我偶尔会遇到以下两个错误中的一个

(<class 'google.appengine.api.remote_socket._remote_socket.error'>, error('An error occured while connecting to the server: ApplicationError: 2 ',), <traceback object at 0x11949c10>)

(<class 'httplib.HTTPException'>, HTTPException('ApplicationError: 5 ',), <traceback object at 0x113a5850>)
(,错误('连接到服务器时发生错误:ApplicationError:2',),)
(,HTTPException('ApplicationError:5',),)
第一个错误(ApplicationError:2)我解释为发生在与之通信的服务器部分的错误,但是我无法找到有关此错误的任何详细信息,以及我是否有责任/可以修复此错误

第二个错误(ApplicationError:5)我在上面找到了一些细节,它表明服务器与我的应用程序通信花费了太长的时间——但是我将超时设置为20秒,它的失败速度要快得多


如果有人能提供有关错误的链接或见解,特别是什么原因导致错误以及可以采取什么措施来修复错误,我将不胜感激。

你可以开始在随意的对话和诅咒中使用“幂等元”这个词:)

您唯一能做的就是再次尝试呼叫,并接受您的初始呼叫可能已经通过的事实,只是在响应时超时-即如果呼叫确实做了什么(例如创建客户订单),在超时错误之后,您可能必须检查第一个请求是否成功,这样您就不会得到同一订单的多个副本


希望这是有道理的。FWIW我们使用一些不友好的API,对我们来说,大约80%的代码都在处理这种!@#$%

你可以开始在随意的对话和诅咒中使用“幂等元”这个词:)

您唯一能做的就是再次尝试呼叫,并接受您的初始呼叫可能已经通过的事实,只是在响应时超时-即如果呼叫确实做了什么(例如创建客户订单),在超时错误之后,您可能必须检查第一个请求是否成功,这样您就不会得到同一订单的多个副本


希望这是有道理的。FWIW我们使用一些不友好的API,对我们来说,大约80%的代码都在处理这种!@#$%

连接的另一端可能已经关闭了连接或类似的东西。您可以共享一些代码和公共URL来重现此问题吗?这些调用隐藏在大量不可发布的代码中,“清理”将是一项相当艰巨的工作。我真的想知道为什么会发生这种情况——常见的错误原因,并看看是否有任何轻松的胜利来克服错误。即使将超时时间增加到120秒,我仍然会遇到这个问题…连接的另一端可能关闭了连接或类似的事情。你能分享一些代码和公共资源吗复制此问题的URL?这些调用被隐藏在大量不可发布的代码中,“清理”将是一项相当艰巨的工作。我真的想知道为什么会发生这种情况——常见的错误原因,看看是否有任何轻松的胜利来克服错误。即使将超时时间增加到120秒,我仍然会遇到这个问题…我目前的策略是再次尝试呼叫-有时有效,有时无效。这是问题的一部分——似乎没有规则或机制来决定调用是否成功。这不是一个好主意。您的调用可能已经成功,如果调用是创建某个对象,例如文件夹,那么它现在就存在了。您的第二次呼叫将创建第二个文件夹。这很可能是不可取的。说得好,我一定要先检查我以前的通话是否成功。我目前的策略是再试一次——有时有效,有时无效。这是问题的一部分——似乎没有规则或机制来决定调用是否成功。这不是一个好主意。您的调用可能已经成功,如果调用是创建某个对象,例如文件夹,那么它现在就存在了。您的第二次呼叫将创建第二个文件夹。这很可能是不可取的。说得好,我一定要先检查一下我之前的通话是否成功。