使用倒计时器跳出while循环Python

时间:2013-09-23 00:14:18

标签: python time timer while-loop countdown

我只需要代码向您展示,我正试图在我的计时器结束时停止我的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为假,或者我的停止方法是完全错误的并且不起作用。

1 个答案:

答案 0 :(得分:0)

更改

  • 当您的计时器到期时,您需要更改状态,以便在调用over时,它将返回True。现在,为了简单起见,我将其保持在全球状态。您可能希望在某些时候更改此内容。
  • 此外,您的while循环条件中存在逻辑错误。我们需要确保它仍然运行并且 结束。

#!/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.