【问题标题】:Sleep until a certain amount of time has passed睡到一定时间
【发布时间】:2021-09-22 22:29:26
【问题描述】:

我正在用 Python 编写一个函数,它等待外部电机完成移动,但电机移动所需的时间是可变的。我想标准化每个动作之间的时间——例如,它们都应该花费 30 秒。

有没有办法实现睡眠功能,使其睡眠所需的时间,直到 30 秒过去?

例如: 如果电机需要 23 秒,该函数将等待 30 秒过去,因此它会休眠 7 秒。

【问题讨论】:

    标签: python sleep


    【解决方案1】:

    这取决于您如何监控电机的运行时间。 例如,假设您将该值存储在变量中, slowdown_time

     #slowdown_time is the variable that stores the time it took for the motor to slow down.
    
     import time
    
     desired_interval = 30   #seconds
    
     sleep_time = desired_interval - slowdown_time
    
     #sleep for remaining time
     time.sleep(sleep_time)
    

    希望对您有所帮助!

    【讨论】:

      【解决方案2】:

      听起来不想睡 30 秒,而是想用睡眠来填充执行活动所需的时间,这样它总是需要 30 秒。

      import time
      from datetime import datetime, timedelta
      
      wait_until_time = datetime.utcnow() + timedelta(seconds=30)
      move_motor()
      seconds_to_sleep = (wait_until_time - datetime.utcnow()).total_seconds()
      time.sleep(seconds_to_sleep)
      

      如果您要在多个地方执行此操作,您可以创建一个可以应用于任何函数的装饰器

      import functools
      import time
      from datetime import datetime, timedelta
      
      def minimum_execution_time(seconds=30)
          def middle(func)
              @functools.wraps(func)
              def wrapper(*args, **kwargs):
                  wait_until_time = datetime.utcnow() + timedelta(seconds=seconds)
                  result = func(*args, **kwargs)
                  seconds_to_sleep = (wait_until_time - datetime.utcnow()).total_seconds()
                  time.sleep(seconds_to_sleep)
                  return result
              return wrapper
      

      然后你就可以这样使用了

      @minimum_execution_time(seconds=30)
      def move_motor(...)
          # Do your stuff
      

      【讨论】:

        猜你喜欢
        • 2010-10-13
        • 1970-01-01
        • 2016-02-03
        • 2019-06-07
        • 1970-01-01
        • 1970-01-01
        • 2011-12-22
        • 1970-01-01
        • 2017-01-27
        相关资源
        最近更新 更多