Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 实现超时。以下代码有什么问题?_Python_Time - Fatal编程技术网

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

Python 实现超时。以下代码有什么问题?,python,time,Python,Time,程序第一次打印过期。我希望代码在打印过期之前至少打印4次“未过期”。有人能解释一下原因并帮我更正代码吗。多谢各位 import time TIMEOUT = 5 class Timer (): def __init__(self): self.timeout = time.time()+TIMEOUT def isExpired (): return time.time() > self.timeout timing = Timer()

程序第一次打印过期。我希望代码在打印过期之前至少打印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()

您有几个问题:

  • 您没有为您的
    isExpired
    方法提供自参数。将其定义为
    def isExpired(self):

  • 您正在每个循环迭代中创建一个新的计时器实例。将
    计时=计时器()
    移到while循环之外

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


  • 这些都是基本的Python问题,与
    计时器
    无关。阅读以了解如何使用类等。

    您有几个问题:

  • 您没有为您的
    isExpired
    方法提供自参数。将其定义为
    def isExpired(self):

  • 您正在每个循环迭代中创建一个新的计时器实例。将
    计时=计时器()
    移到while循环之外

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


  • 这些都是基本的Python问题,与
    计时器
    无关。阅读以了解如何使用类等。

    您每次都在创建一个
    计时器
    实例。将其从循环中移除,否则您的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)
    

    您每次都在创建一个
    计时器
    实例。将其从循环中移除,否则您的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)
    

    i get errorTypeError:isExpired()不接受任何参数(给定1)@user1488987参考第1点。-调用实例函数时,隐式地将实例作为第一个参数,而函数
    isExpired
    根本不接受任何参数。我得到errorTypeError:isExpired()不接受任何参数(给定1)@user1488987参考第1点。-调用实例函数时,隐式地将实例作为第一个参数,而函数
    isExpired
    根本不接受任何参数。我使用了计时器实例。但是程序的行为保持不变。@user1488987我测试了它,它运行正常。问题是超时时间是300秒,所以如果你不耐烦的话,应该减少这个数字:)我使用了计时器实例。但是程序的行为保持不变。@user1488987我测试了它,它运行正常。问题是超时时间是300秒,所以如果你不耐烦,应该减少这个数字:)