2011-06-28 126 views
1

我正在Python中使用beanstalkc作爲程序的排隊進程,該程序必須解析URL列表。因此,我在beanstalk中使用超時,以避免任何URL耗費大量時間。但即使在使用它之後,我的過程也沒有超出限制,並且需要花費大量時間來分析幾個URL。我正在使用下面的代碼:Beanstalkc超時問題

for seed in seedlist: 
    print 'Put data: %s' % seed 
    bean.put(seed,ttr =5) 
while True: 
    job = bean.reserve() 
    spider.spider(job.body) 
    print 'Got data: %s' % job.body 

回答

3

我認爲你誤解了beanstalkd的TTR超時的目的。引述beanstalkd FAQ

如何TTR工作

TTR僅適用於工作在它成爲保留的時刻。在這種情況下,一個計時器(在工作狀態中稱爲「剩餘時間」)從作業的TTR開始倒計時。

  • 如果計時器達到零,則作業將恢復到就緒隊列中。
  • 如果在定時器耗盡之前作業被隱藏,刪除或釋放,定時器將不復存在。
  • 如果在定時器到達零之前「觸摸」作業,則定時器從TTR開始倒計時。

(作業的作業未仍保留統計包含「時間左」的條目,但它的價值是沒有意義的。)

所以TTR不幫你在「避免任何URL大量時間消耗」。它不會奇蹟般地殺死你的工作進程。只要beanstalkd將作業放回隊列中,如果工作人員在給定的時間範圍(TTR)之後未將作業標記爲已完成。