拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 回圈直到串列在Python中不为空

回圈直到串列在Python中不为空

白鹭 - 2022-01-23 2080 0 0

我正在开发一个有两个类的网络抓取工具。一个获取资料,另一个类处理它。第一类的最终结果是一个元素串列,例如results = [1, 2, 3, 4, 5, ...] . 问题是有时,由于服务器端错误,串列可能为空。我怎样才能回圈通过这个来重新启动行程,直到串列不为空?

我有点像这样解决了它。但我不确定这是否有效或良好的做法。

class DataScrapper:
      def __init__(self):
         ...
      
      def getData(self):
         self.results = []
         while not self.results:
              ...
         return self.results

这是解决问题的pythonic方法吗?还有其他更有效的方法吗?非常感谢你。

uj5u.com热心网友回复:

在大多数情况下,您的习语很简单而且很好。

但是,您必须记住两件事:

  1. 您没有限制重试次数。如果服务器长时间宕机,你的脚本就会卡住。
  2. 即使在停机期间,您也会继续生成请求。这可能会导致较大的客户端和服务器负载。我强烈建议使用指数退避策略。

在 google 中快速搜索找到了backoff库,它允许您同时执行以下操作:

@backoff.on_predicate(backoff.expo, lambda x: x == [], max_tries=10)
def getData(self):
     self.results = []
     ...
     return self.results

它检查回传值,如果它是一个空串列,则再次运行该函式并增加延迟,直到达到 10 次尝试。

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *