【发布时间】:2021-09-22 22:29:26
【问题描述】:
我正在用 Python 编写一个函数,它等待外部电机完成移动,但电机移动所需的时间是可变的。我想标准化每个动作之间的时间——例如,它们都应该花费 30 秒。
有没有办法实现睡眠功能,使其睡眠所需的时间,直到 30 秒过去?
例如: 如果电机需要 23 秒,该函数将等待 30 秒过去,因此它会休眠 7 秒。
【问题讨论】:
我正在用 Python 编写一个函数,它等待外部电机完成移动,但电机移动所需的时间是可变的。我想标准化每个动作之间的时间——例如,它们都应该花费 30 秒。
有没有办法实现睡眠功能,使其睡眠所需的时间,直到 30 秒过去?
例如: 如果电机需要 23 秒,该函数将等待 30 秒过去,因此它会休眠 7 秒。
【问题讨论】:
这取决于您如何监控电机的运行时间。 例如,假设您将该值存储在变量中, 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)
希望对您有所帮助!
【讨论】:
听起来不想睡 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
【讨论】: