簡體   English   中英

睡到一定時間后

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM