2013-09-23 4 views
0

나는 타이머를 끝내면 while 루프를 멈추려 고합니다. 그렇게 할 수있는 방법이 있습니까? 카운트 다운 타이머를 사용하여 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 

당신이 볼 수 있듯이

, 내 While 루프를 정지하는 기능 over()를 사용하는 것을 시도하고있다. 현재 시간이 멈 추면 over는 false로 반환되지만 while 루프에는 영향을주지 않습니다. 나는 틀린 일을해야만합니다.

그래서 Timer 객체는 함수 param을 전달하여 타이머가 끝나면 함수 over()을 호출하도록 허용합니다. over()False을 반환하므로 실시간으로 while 루프에 직접 영향을 미치지 않습니다. 암시 적으로 while을 false로 설정하는 콜백이 필요하거나 중단하는 방법이 completly 잘못되어 작동하지 않습니다. over가 호출 될 때, 그것은 True가 반환되도록

답변

0

변경
  • 당신의 타이머가 만료

, 당신은 상태를 변경해야합니다. 지금 당장은 단순성을 위해 글로벌 상태로 유지합니다. 당신은 이것을 어느 시점에서 바꾸고 싶을 것입니다.
  • 또한 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. 
    
    관련 문제