如何处理boto中的请求超时(408)错误?

2024-10-01 17:40:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我们正在使用域。选择()方法,boto提供的,用于查询SimpleDB。对于较小的查询(涉及几个小时的数据的查询),这种方法可以很好地工作。但当我开始使用 多线程和更长的查询(24小时的数据),它开始超时,在stdout上给出以下错误:

-------------------------
         4 0 8
...
<?xml version="1.0"?>
<Response><Errors><Error><Code>QueryTimeout</Code><Message>A timeout occurred when attempting to query domain 'd110824' with query expression 'select * from `d110824` where `timestamp` &gt;= '2011-08-24T10:45:56' and `timestamp` &lt; '2011-08-25T10:45:56' and `identifier` = '00063F052C49' order by `timestamp` asc </Message><BoxUsage>0.0055590278</BoxUsage></Error></Errors><RequestID>....</RequestID></Response>

当遇到这个错误时,我想实现一个重试机制(指数退避)。Boto不会为这个错误抛出任何异常,只需打印它。为了实现重试机制,我需要某种类型的错误代码或异常来知道错误已经发生。在

对如何在博图实现这一点有什么想法?在


Tags: and数据方法messageresponse错误codeerror
2条回答

我在boto上也遇到了同样的问题,最后把它分叉,直接添加了一个指数退避。见https://github.com/datacratic/boto/blob/develop/boto/sdb/queryresultset.py#L83。在

Boto将在503上重试,但不会在408上重试。在

有几种情况会使boto重试,包括503(服务不可用)和尝试连接时的某些类型的HTTP错误。它将使用指数退避,并尝试最多5次默认。您可以通过在.boto配置文件中设置num_retries来更改重试次数:

[Boto]
num_retries = 3

我不知道为什么在408上不重试。我看过的AWS文档建议这样做。在

相关问题 更多 >

    热门问题