在Python 3中,我编写了一个程序,检查自上次命令启动以来是否超过30秒并执行这些命令。同时,它会检查执行10秒的其他命令,此外,条件必须为真。
from datetime import datetime
lastExecute1 = datetime(1, 1, 1)
lastExecute2 = datetime(1, 1, 1)
while True:
utcnow = datetime.utcnow()
if (utcnow - lastExecute1).total_seconds() >= 30:
runCommands1()
lastExecute1 = utcnow
if (utcnow - lastExecute2).total_seconds() >= 10 and someCondition:
runCommands2()
lastExecute2 = utcnow
该程序有效,但处理器负载很高(我在Raspberry Pi上运行)并且处理器已加热。
这就是我使用sched模块(https://stackoverflow.com/a/474543/6523409)的原因。这个程序也可以,但处理器负载较低,这很好。问题是前一个程序的延迟只有几毫秒,现在是半秒(命令运行在0:0.0,0 :30.5,1:1.0,1:31.5 ...而不是0:0.0,0:30.0,1:0.0,1:30.0 ......)。因此,在10分钟内,延迟增加约10秒钟。