【问题标题】:Can I disable time.sleep() temporarily?我可以暂时禁用 time.sleep() 吗?
【发布时间】:2017-09-09 23:00:05
【问题描述】:

我正在制作一个包含大量time.sleep()的程序...我想知道是否有办法可以暂时禁用time.sleep()s(例如,如果传递了某个参数,@ 987654325@s 不要运行)

【问题讨论】:

  • def foo(x): if x == 'sleep': time.sleep(100)
  • 为什么或如何可能会起作用?
  • 考虑在谷歌上搜索“Python 模拟框架”。在 Python 3 中,unittest.mock 甚至是标准库的一部分。修补模拟对象以代替真实对象(同样,任何体面的模拟框架都可以使用上下文管理器为您做事,以便稍后撤消更改 - 无需手动完成,因为接受的答案确实如此),你就在那里。
  • (另见 pytest monkeypatch)。
  • 对于没有 Python 经验的人来说,我不会发现这一点,因此提出了这个问题。

标签: python


【解决方案1】:

如果您的程序不需要将 time 模块用于其他任何事情,您可以创建一个名为 time.py 的新 python 文件,并在其中写入一行 pass。保存并将其放在与其他文件相同的目录中。另外,如果您创建了一个变量并将其乘以每个 time.sleep。例如:time.sleep(100*x) 您可以将变量设置为零并删除睡眠或设置为 1 以使其正常

【讨论】:

    【解决方案2】:

    我不明白你为什么要经历这么多麻烦。你可以简单地保存原来的time.sleep,当你想禁用它时覆盖time.sleep。对于您希望time.sleep 无论如何都发生的某些地方,只需使用备份time.sleep 代替。

    import time
    
    org_sleep = time.sleep # save the original time.sleep
    
    sleep = False # set sleep to false when doesn’t want to sleep
    
    if sleep != True: # if sleep is false
        # override time.sleep to an empty function
        time.sleep = lambda x: None 
    
    time.sleep(10) # does not sleep
    print("didn’t sleep")
    
    org_sleep(10) # will sleep regardless of sleep being set to true or false
    print("slept for 10 seconds")
    

    此外,正如 Charles Duffy 建议的那样,使用 pytest 的 monkeypatch 模拟 time.sleep 是首选方法。

    【讨论】:

    • 尽管@Charles Duffy 说了什么,IMO 在这种情况下几乎没有理由使用 pytest 的 monkeypatch,因为自己做会很简单。见问题What is a monkey patch?
    【解决方案3】:
    import time
    time.oldsleep = time.sleep
    # Set or clear this flag to enable/disable sleep
    time.cansleep = True
    def mysleep(x):
      if time.cansleep:
        time.oldsleep(x)
    
    time.sleep = mysleep
    

    编辑:废话已删除。模块是单例的。直到。

    【讨论】:

    • 模块是单例的,您在time 模块中修改seep,因此更改随处可见,您使用time.sleep。唯一的例外是,当您在完成补丁之前使用from time import sleep
    • Philip:这个答案中关于需要在你import 模块的任何地方进行更改的部分是不正确的——随后尝试做同样的事情会导致time.oldsleep 被设置为以前的已经被重写的函数版本——虽然它会“工作”,但完全没有必要(而且可能会让任何真正了解 Python 如何处理模块加载的人感到困惑)。
    • 我相应地编辑了答案。是时候回到 Python 101 了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 2012-05-21
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 2014-10-26
    相关资源
    最近更新 更多