python - 异常后如何重试迭代器next()
问题描述
我有一个迭代器,它有时会给我一个套接字超时,我想知道如何重试套接字超时,而不是跳到迭代器中的下一个项目。
迭代器是使用以下方法创建的:
iterator = pool.imap(process_hit, new_nongeneric_search.scan())
所以我在process_hit
Elasticsearch 查询 () 的结果中的每个项目上调用一个函数 ( new_nongeneric_search.scan()
)。目前,当我遇到超时时,我只是捕捉到异常并继续next(it)
再次调用。
这是我目前的做法:
while True:
try:
next(it)
except StopIteration:
logging.info("No more results to process.")
return
except socket.timeout:
logging.warning("Encountered timeout.")
如果我通过手动重新运行脚本重试同一项目足够多次,超时将自行解决,因此我希望能够以编程方式重试有问题的项目,而不是仅仅重复多次搜索。
解决方案
您的迭代器不返回任何内容,并且迭代器接口不支持“返回”,因此您无法在您提供的代码中“重试”。
从您的迭代器返回一些可用于“重试”的内容,或者在迭代器的逻辑中处理重试(在您的情况下,这将在内部process_hit()
或new_nongeneric_search.scan()
取决于您获得超时的步骤)。
推荐阅读
- hibernate - Hibernate Enver 为 auditReader.find() 抛出 Object not found 异常
- html - 仅为移动设备添加课程
- sas - SAS中的加权平均值
- python - TypeError: Student() 没有参数
- python - Pandas:将包含字符串列表的列转换为每个值的新列
- html - 输入和标签没有溢出
- angular - 将 Angular 8/WebApi 部署到 AWS
- java - 如何解决 Quarkus Hibernate 插入 SQLGrammerException
- sql - 如何使用 ORDER BY 连接行
- javascript - 为什么图形线偏离 Y 轴和 X 轴?