Beanstalkc 超时问题

1 投票
1 回答
986 浏览
提问于 2025-04-16 20:26

我在用Python的beanstalkc库来处理一个程序,这个程序需要解析一堆网址。因此,我在beanstalk中设置了超时时间,以避免某个网址消耗太多时间。但是即使设置了超时,我的程序还是没有在规定时间内结束,解析几个网址也花了很长时间。我使用的代码如下:

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

1 个回答

3

我觉得你对beanstalkd的TTR超时的目的有些误解。引用一下beanstalkd的常见问题解答

TTR是怎么工作的

TTR只在一个任务被预定的那一刻开始生效。这个时候,会有一个计时器(在任务统计中叫“剩余时间”)从任务的TTR开始倒计时。

  • 如果计时器倒计时到零,任务会被放回准备队列。
  • 如果任务在计时器到期之前被埋藏、删除或释放,计时器就会停止。
  • 如果在计时器到零之前对任务进行“触碰”,计时器会重新开始,从TTR重新倒计时。

(一个没有被预定的任务的统计信息中仍然会有“剩余时间”这一项,但它的值是没有意义的。)

所以,TTR并不能帮助你“避免任何URL消耗大量时间”。它并不会神奇地终止你的工作进程。它的作用只是,如果一个工作者在给定的时间段(TTR)内没有标记任务为完成,beanstalkd就会把这个任务放回队列。

撰写回答