我有一个while循环作为我的主要功能。在其中我检查几个IF语句并相应地调用函数。一个特殊的功能,如果它已经在最后两分钟内运行,我不想打电话。我不想在函数中放置WAIT()语句,因为我希望在那段时间内执行其他IF测试。
在尝试暂停myFunction()之前,代码就是这样的while not(exit condition):
if(test):
otherFunction()
if(test):
otherFunction()
if(test):
myFunction()
我希望myFunction()每两分钟最多运行一次。我可以在其中放置一个等待(120)但这会阻止在那段时间内调用otherFunction()。
我试过
import time
set = 0
while not(exit condition):
if(test):
otherFunction()
if(test):
otherFunction()
if(test):
now = time.clock()
diff = 0
if not(set):
then = 0
set = 1
else:
diff = now - then
if (diff > 120):
myFunction()
then = now
没有成功。不确定它是否是正确的方法,如果是,那么这个代码是否正确。我第一次使用Python(实际上是Sikuli),我似乎无法跟踪执行情况,看看它是如何执行的。
答案 0 :(得分:2)
我认为你基本上是在正确的轨道上,但这是我实现它的方式:
import time
MIN_TIME_DELTA = 120
last_call = time.clock() - (MIN_TIME_DELTA+1) # init to longer than delta ago
while not exit_condition:
if test:
otherFunction()
if test:
anotherFunction()
if test and ((time.clock()-last_call) > MIN_TIME_DELTA):
last_call = time.clock()
myFunction()
修改强>
这是一个稍微优化的版本:
next_call = time.clock() - 1 # init to a little before now
while not exit_condition:
if test:
otherFunction()
if test:
anotherFunction()
if test and (time.clock() > next_call):
next_call = time.clock() + MIN_TIME_DELTA
myFunction()
答案 1 :(得分:0)
您始终将“now”设置为当前时间。在else分支中,您始终将“then”设置为now。因此,diff总是在if子句的最后两次执行之间传递的时间。 “set”的值仅在代码中更改,并且永远不会设置为“0”。
你可以这样做(警告:未经测试的代码):
import time
set = 0
last_call_time = time.clock()
while not(exit condition):
if(test):
otherFunction()
if(test):
otherFunction()
if(test):
now = time.clock()
diff = now - last_call_time
if (diff > 120)
myFunction()
last_call_time = now