2011-06-28 85 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)之后未将作业标记为已完成。