urlfetch.set_default_fetch_deadline并不总是覆盖默认的5s

时间:2014-09-01 05:21:42

标签: google-app-engine

当上传到flickr时,我的应用程序间歇性地(大约10%的时间?小样本量)在5s之后超时,即使在覆盖截止日期之后也是如此。有什么想法会导致这种情况吗?

2 个答案:

答案 0 :(得分:1)

如果您嵌入了AppEngine库,则可以修补网址获取并在截止日期前设置60秒。它位于文件httplib2 / init .py(2次修改)中:

       def fixed_fetch(url, payload=None, method="GET", headers={},
                       allow_truncated=False, follow_redirects=True,
                      deadline=60):
           return fetch(url, payload=payload, method=method, headers=headers,
                        allow_truncated=allow_truncated,
                       follow_redirects=follow_redirects, deadline=60,
                        validate_certificate=validate_certificate)
       return fixed_fetch

答案 1 :(得分:-1)

与Maël提出的建议相反,为了充分处理这种情况,你应该减少(或者只是保留默认值)URLFetch调用的截止时间,然后捕获异常并重试多次进行指数退避。我们的想法是,如果服务器暂时关闭(因为它可能在您的情况下发生),那么在重新启动的同时响应的请求也不会令人不知所措。您可以看到此练习的简要说明here

或者,您可以使用Sockets API作为httplib来使用套接字。