首页 > 解决方案 > 异常后如何重试迭代器next()

问题描述

我有一个迭代器,它有时会给我一个套接字超时,我想知道如何重试套接字超时,而不是跳到迭代器中的下一个项目。

迭代器是使用以下方法创建的: iterator = pool.imap(process_hit, new_nongeneric_search.scan()) 所以我在process_hitElasticsearch 查询 () 的结果中的每个项目上调用一个函数 ( 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.")

如果我通过手动重新运行脚本重试同一项目足够多次,超时将自行解决,因此我希望能够以编程方式重试有问题的项目,而不是仅仅重复多次搜索。

标签: pythoniterator

解决方案


您的迭代器不返回任何内容,并且迭代器接口不支持“返回”,因此您无法在您提供的代码中“重试”。

从您的迭代器返回一些可用于“重试”的内容,或者在迭代器的逻辑中处理重试(在您的情况下,这将在内部process_hit()new_nongeneric_search.scan()取决于您获得超时的步骤)。


推荐阅读