2017-03-16 3 views
1

첫째, 내 코드는 여기에 있습니다 :python scheduling - 무한 루프를 피하려면 어떻게해야합니까?

while 루프에서
import schedule # see https://github.com/dbader/schedule 
import crawler 

def job(): 
    print("Start my scheduled job...") 
    cw.run() 

if __name__ == "__main__": 
    cw = crawler.crawler() 

    print("Initial crawling...") 
    cw.run() 

    schedule.every(10).seconds.do(job) 

    while True: 
     schedule.run_pending() 
     for title, link in zip(cw.titles, cw.links): 
      print("%s[%s]" % (title, link)) 

, 난 단지 예약 된 작업을 완료 한 후에는 for 루프를 실행합니다.

그러나 그 for 루프가 무한히 실행됩니다.

이유를 알고 있습니다. 그러나 나는 그것을 고치는 법을 모른다.

아무도 도와 줄 수 있습니까?

+0

@nfnneil'run_pending()'은'None' 만 반환합니다. 그렇지 않습니까? –

답변

2

어때?

def job(): 
    print("Start my scheduled job...") 
    cw.run() 
    for title, link in zip(cw.titles, cw.links): 
     print("%s[%s]" % (title, link)) 

if __name__ == "__main__": 
    cw = crawler.crawler() 

    print("Initial crawling...") 
    cw.run() 

    schedule.every(10).seconds.do(job) 

    while True: 
     schedule.run_pending() 

난 그냥 job()for 루프를 이동했다.

+0

더 나은 구현입니다 +1 –

1

확실한 방법이 있지만 함수에 for 루프를 넣은 다음 schedule.run_pending()을 거짓 인수로 전달하는 것은 어떨까요? 이와 같이 :

def foo(dummy): 
    for title, link in zip(cw.titles, cw.links): 
     print("%s[%s]" % (title, link)) 

while True: 
    foo(schedule.run_pending()) 

이 코드는 테스트하지 않았지만 작동해야한다고 생각합니다. 행운을 빕니다.