2017-03-16 76 views
1

首先,我的代碼是在這裏:python調度 - 如何避免無限循環?

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)) 

while循環,我只想要預定作業完成後執行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() 

我剛搬來的for循環到job()

+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()) 

我還沒有測試過這段代碼,但我認爲它應該可以工作。祝你好運。