实现超时。以下代码有什么问题?

时间:2012-07-22 21:33:04

标签: python time

程序第一次打印Expired。我希望代码在打印过期之前至少打印4次“未过期”。有人可以解释原因并帮我纠正代码。谢谢

import time
TIMEOUT =  5

class Timer ():
    def __init__(self):
        self.timeout = time.time()+TIMEOUT
    def isExpired ():
        return time.time() > self.timeout

timing = Timer()

def main():
    while 1:
        if timing.isExpired:
            print "Expired"
            return
        else:
            print "Not expired"
            print "sleeping for 1 second"
            time.sleep(1)

if __name__== "__main__":
    main()

2 个答案:

答案 0 :(得分:3)

你有几个问题:

  1. 您没有给自己的isExpired方法一个自我论证。将其定义为def isExpired(self):

  2. 您正在每次循环迭代中创建一个新的Timer实例。将timing = Timer()移到while循环之外。

  3. timing.isExpired是对方法对象iself的引用(在布尔上下文中始终为true)。您需要timing.isExpired()来实际调用它。

  4. 这些都是与Timer无关的基本Python问题。阅读the Python tutorial以了解如何使用课程等。

答案 1 :(得分:1)

您每次都在创建Timer个实例。把它从循环中拿走,或者你的while循环永远不会终止。此外,您需要调用timing.isExpired,因为它是一种方法。所以你的代码应该是:

import time
TIMEOUT = 60 * 5

class Timer ():
    def __init__(self):
        self.timeout = time.time()+TIMEOUT
    def isExpired (self):
        return time.time() > self.timeout


def main():
    timing = Timer()
    while 1:
        if timing.isExpired():
            print "Expired"
            return
        else:
            print "Not expired"
            print "sleeping for 1 second"
            time.sleep(1)