实施重试例程

2023-12-01

我有以下想法。是否可以在 python 中实现重试例程?这是我所做的一个简单示例。我想要一个更灵活的解决方案。独立于功能。因此,将removeFile 与任何其他函数切换,并摆脱main 中的while 循环。

import os
import time

def removeFile(file):

    try:
        os.remove(file)
        print("removed : "+file)
        return True
    except PermissionError:
        print("could not delete file "+file+" ; will try again")
        return False


if __name__ == "__main__":
    file = "some_path/file.ext"

    sucess = False
    maxCount = 5
    count = 0
    while not sucess:
        sucess = removeFile(file)
        count += 1
        if count == maxCount:
            sucess = True
            print("could not delete file "+file+" ; permission denied.")
        time.sleep(5)

感谢@shmee,我得到了一种新方法,使用装饰器。

def retry(ExceptionToCheck, tries=4, delay=3, backoff=2, logger=None):
    """Retry calling the decorated function using an exponential backoff.

    http://www.saltycrane.com/blog/2009/11/trying-out-retry-decorator-python/
    original from: http://wiki.python.org/moin/PythonDecoratorLibrary#Retry

    :param ExceptionToCheck: the exception to check. may be a tuple of
        exceptions to check
    :type ExceptionToCheck: Exception or tuple
    :param tries: number of times to try (not retry) before giving up
    :type tries: int
    :param delay: initial delay between retries in seconds
    :type delay: int
    :param backoff: backoff multiplier e.g. value of 2 will double the delay
        each retry
    :type backoff: int
    :param logger: logger to use. If None, print
    :type logger: logging.Logger instance
    """
    def deco_retry(f):

        @wraps(f)
        def f_retry(*args, **kwargs):
            mtries, mdelay = tries, delay
            while mtries > 1:
                try:
                    return f(*args, **kwargs)
                except ExceptionToCheck:
                    msg = "%s, Retrying in %d seconds..." % (str(ExceptionToCheck), mdelay)
                    if logger:
                        #logger.exception(msg) # would print stack trace
                        logger.warning(msg)
                    else:
                        print(msg)
                    time.sleep(mdelay)
                    mtries -= 1
                    mdelay *= backoff
            return f(*args, **kwargs)

        return f_retry  # true decorator

    return deco_retry  

现在唯一要做的就是装饰我们的小删除函数:

 @retry(PermissionError, tries=5, delay=2,backoff=2)
    def removeFile(f):
        os.remove(f)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实施重试例程 的相关文章

  • Django 代理模型的继承和多态性

    我正在开发一个我没有启动的 Django 项目 我面临着一个问题遗产 我有一个大模型 在示例中简化 称为MyModel这应该代表不同种类的物品 的所有实例对象MyModel应该具有相同的字段 但方法的行为根据项目类型的不同而有很大差异 到目
  • 通过 Scrapy 抓取 Google Analytics

    我一直在尝试使用 Scrapy 从 Google Analytics 获取一些数据 尽管我是一个完全的 Python 新手 但我已经取得了一些进展 我现在可以通过 Scrapy 登录 Google Analytics 但我需要发出 AJAX
  • 将数据从 python pandas 数据框导出或写入 MS Access 表

    我正在尝试将数据从 python pandas 数据框导出到现有的 MS Access 表 我想用已更新的数据替换 MS Access 表 在 python 中 我尝试使用 pandas to sql 但收到错误消息 我觉得很奇怪 使用 p
  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • Python - StatsModels、OLS 置信区间

    在 Statsmodels 中 我可以使用以下方法拟合我的模型 import statsmodels api as sm X np array 22000 13400 47600 7400 12000 32000 28000 31000 6
  • PyUSB 1.0:NotImplementedError:此平台不支持或未实现操作

    我刚刚开始使用 pyusb 基本上我正在玩示例代码here https github com walac pyusb blob master docs tutorial rst 我使用的是 Windows 7 64 位 并从以下地址下载 z
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • 如何加速Python中的N维区间树?

    考虑以下问题 给定一组n间隔和一组m浮点数 对于每个浮点数 确定包含该浮点数的区间子集 这个问题已经通过构建一个解决区间树 https en wikipedia org wiki Interval tree 或称为范围树或线段树 已经针对一
  • AWS EMR Spark Python 日志记录

    我正在 AWS EMR 上运行一个非常简单的 Spark 作业 但似乎无法从我的脚本中获取任何日志输出 我尝试过打印到 stderr from pyspark import SparkContext import sys if name m
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • Pygame:有没有简单的方法可以找到按下的任何字母数字的字母/数字?

    我目前正在开发的游戏需要让人们以自己的名义在高分板上计时 我对如何处理按键有点熟悉 但我只处理过寻找特定的按键 有没有一种简单的方法可以按下任意键的字母 而不必执行以下操作 for event in pygame event get if
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • 有没有办法检测正在运行的代码是否正在上下文管理器内执行?

    正如标题所述 有没有办法做到这样的事情 def call back if called inside context print running in context else print called outside context 这将
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P

随机推荐

  • 将我的布局转换为圆环形状

    我想将我的线性布局做成环形 我遵循了此链接 但没有得到环形布局 而是得到了圆形布局 https developer android com guide topics resources drawable resource html Shap
  • 像 Gmail Honeycomb 应用程序一样的片段动画

    如何重新创建影响您在 Android 3 0 上的 Gmail 应用程序中看到的布局动画 我知道您可以使用PropertyAnimators ObjectAnimators等 但在我的场景中 屏幕上有几个可以互换的片段 因此它们都包含在自己
  • 如何添加整个包来通过代码传输请求?

    我的任务是以编程方式完成所有这些步骤 创建一个新的传输请求 我设法做到了TR INSERT REQUEST WITH TASKS 将包内容添加到新创建的传输中 这是我陷入困境的部分 释放传输 我设法做到了这一点TR RELEASE REQU
  • 如何在 Cosmos DB 容器上显示唯一键?

    这个链接意味着可以通过查看设置在 Cosmos DB 容器中看到唯一键 但是 我似乎无法同时使用门户和存储资源管理器找到它们 如何查看现有 Cosmos DB 容器上的唯一键 我有一个文档由于密钥冲突而无法加载 这应该是不可能的 所以我需要
  • Apps 脚本 - 模态显示和 google.script.run 从有界到库

    我有一个电子表格文件 其中包含集成了库的有界脚本 该库提供了2个函数 显示带有按钮的 html 模式 提供点击 html 上的按钮时的回调函数 图书馆内容 test html
  • PHPWord 中的 HTML 阅读器无法处理表格?

    当我使用 Html 阅读器将 html 转换为 docx 时 阅读器被切断了我的表格 PHP 示例 reader IOFactory createReader HTML phpWord reader gt load this gt getR
  • 加密 URL 中的路由数据

    在我的 ASP NET MVC 应用程序中 我想加密路由数据而不是 QueryString 换句话说 我正在使用 ASP NET MVC 默认路由模式 routes MapRoute name Default url controller
  • 如何使用第一个表中的逗号分隔值从其他表中选择行? [复制]

    这个问题在这里已经有答案了 有没有办法使用第一个表中的逗号分隔值从其他表中选择行 表格1 faculty subject 101 102 104 103 105 表 2 subject code subject 101 subject 1
  • new Date() 依赖于操作系统吗?

    好吧 我正在使用 javascript 通过简单的正则表达式返回用户系统时间的简写时区 如下所示 new RegExp exec new Date toString 0 这在 Mac 下使用 chrome 效果很好 例如我按预期得到 UTC
  • 变量以及它们在 prolog 中的设置和使用方式

    http www csupomona edu jrfisher www prolog tutorial 2 1 html 所以在那个教程中它有 conflict Coloring adjacent X Y color X Color Col
  • 在页面之间发送参数的最佳方式是什么?

    我们在项目中使用 JSF 我对它还很陌生 每个页面都有一个 back bean Java 文件 为了从一个页面移动 重定向 到另一个页面 我需要在重定向之前将所有参数 搜索条件 放入请求范围中 然后在下一页构造函数中检索它 当你的页面深度很
  • 如何在邮件合并中保留谷歌电子表格的格式?

    我想发送一封电子邮件 其中包含谷歌电子表格内容作为带有格式的正文 我参考了here但它仅适用于单元格 A1 我希望它适用于完整的数据范围 如何在发送电子邮件时保留所有格式 你需要使用getRichTextValues获取给定范围内每个单元格
  • 嵌入文档属性的多次更新

    我有以下收藏 Milestones ActualDate null Index 0 Name milestone1 TargetDate ISODate 2011 12 13T22 00 00Z id ObjectId 4ee89ae7e6
  • config.exceptions_app 无法在 Rails 中工作

    我正在尝试为所有 404 和 500 错误呈现自定义错误页面 所以我在ErrorController类中定义了两个方法not found和internal server error class ErrorController lt Appl
  • 在代理处理程序中,如何区分获取属性(var)与调用方法?

    我有以下代码 其中我使用代理对象 代理 来尝试捕获方法调用和属性访问 例子 https jsfiddle net r8j4fzxL 2 function use strict console clear some empty class w
  • Lisp 中的 setq 和 defvar

    我看到实用 Common Lisp uses defvar db nil 用于设置一个全局变量 使用不是可以吗setq为了同样的目的 使用的优点 缺点是什么defvar vs setq 引入变量的方法有多种 DEFVAR and 定义参数介
  • 为什么两个表之间的完全外连接结果中有NULL?

    我试图从两个表中获取唯一值 这两个表都只有一列称为域 DDL create table domains 1 domain varchar create table domains 2 domain varchar DML insert in
  • 使用htaccess将目录传递给GET参数而不重写url

    我想传递 而不是重定向 这样的东西 http www example com 有 可选 传递给脚本http www example com index php http www example com foo 有 可选 传递给脚本http
  • Python 等语言如何克服 C 的整数数据限制?

    使用 C Python 和 Scheme 中的阶乘程序进行一些随机实验 我发现了这个事实 在 C 中 使用 unsigned long long 数据类型 我可以打印的最大阶乘为 65 即 9223372036854775808 即指定的
  • 实施重试例程

    我有以下想法 是否可以在 python 中实现重试例程 这是我所做的一个简单示例 我想要一个更灵活的解决方案 独立于功能 因此 将removeFile 与任何其他函数切换 并摆脱main 中的while 循环 import os impor