[英]Sleep until a certain amount of time has passed
我正在用 Python 編寫一個函數,等待外部電機完成移動,但電機移動所需的時間是可變的。 我想標准化每個動作之間的時間——例如,它們都應該花費 30 秒。
有沒有辦法實現睡眠功能,使其睡眠所需的時間,直到 30 秒過去?
例如:如果電機需要 23 秒,該函數將等待 30 秒過去,因此它將休眠 7 秒。
這聽起來像是不想睡 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
這取決於您如何監控電機的運行時間。 為了舉例,我們假設您將該值存儲在一個變量中, 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)
希望這是有幫助的!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.