似乎应该使用time模块或某种简单的解决方案,但我已经尝试了一些方法,但似乎没有任何效果。我需要这样的工作:

hungry = True
if line.find ('feeds'):
    #hungry = False for 60 seconds, then hungry is true again


有人对此有解决方案吗?

编辑:至于我已经尝试过,我已经尝试了这段代码:

if hungry==True:
     print('yum! not hungry for 20 seconds')
     hungry = False
     i = 20
     while(i>0):
         i-=1
         time.sleep(1)
         if(i==0):
             hungry = True


但这是行不通的,因为程序只是暂停直到hungry再次为True,而hungry在程序休眠时为false将无济于事。在程序的其余部分正常工作的一定时间内,它应该是错误的

编辑:看起来如果没有线程,这将是不可能的。我将不得不找到一个新的解决方案,或者学习使用线程。无论如何,感谢您的所有帮助,我非常感谢!

最佳答案

您可以将所需的行为封装在TimedValue类中,但这在这里可能是过大了-我可能会做类似的事情

now = time.time()
hunger = lambda: time.time() > now + 60


然后在需要该值时使用hunger()代替hungry。这样,代码就不会阻塞,我们可以继续进行工作,但是hunger()将为我们提供正确的状态。例如。

import time
now = time.time()
hunger = lambda: time.time() > now + 60
for i in range(10):
    print 'doing stuff here on loop', i
    time.sleep(10)
    print 'hunger is', hunger()


产生

doing stuff here on loop 0
hunger is False
doing stuff here on loop 1
hunger is False
doing stuff here on loop 2
hunger is False
doing stuff here on loop 3
hunger is False
doing stuff here on loop 4
hunger is False
doing stuff here on loop 5
hunger is True
doing stuff here on loop 6
hunger is True
doing stuff here on loop 7
hunger is True
doing stuff here on loop 8
hunger is True
doing stuff here on loop 9
hunger is True

10-08 15:10