0

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

4

1 回答 1

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.
于 2013-09-23T00:18:41.197 回答