我只需要代码向您展示,我正试图在我的计时器结束时停止我的while循环。有没有办法做到这一点?
from threading import Timer
def run(timeout=30, runs):
timer(timeout)
while runs > 0 or over():
#Do something
print "start looping"
def timer(time):
t = Timer(time, over)
print "timer started"
t.start()
def over():
print "returned false"
return False
正如您所看到的,我正在尝试使用函数over()
来停止我的while循环。目前,当我的时间停止时,over返回为false,但它不会影响我的while循环。我一定做错了什么。
所以Timer
对象允许我做的是传递函数参数,以便在计时器结束时,它调用该函数over()
。当over()
返回False
时,它不会直接影响while循环。我是否需要回调来隐式强制while
为假,或者我的停止方法是完全错误的并且不起作用。
答案 0 :(得分:0)
over
时,它将返回True
。现在,为了简单起见,我将其保持在全球状态。您可能希望在某些时候更改此内容。#!/usr/bin/env python
from threading import Timer
globalIsOver = False
def run(runs, timeout=30):
timer(timeout)
while runs > 0 and not over():
#Do something
print "start looping"
print 'Exited run function.'
def timer(time):
t = Timer(time, setOver)
print "timer started"
t.start()
def setOver():
global globalIsOver
print '\nSetting globalIsOver = True'
globalIsOver = True
def over():
global globalIsOver
print 'returned = ' + str(globalIsOver)
return globalIsOver
run(100000000, timeout=2)
在2秒过期后返回以下内容:
...
start looping
returned = False
start looping
returned = False
start looping
returned = False
Setting globalIsOver = True
start looping
returned = True
Exited run function.