1

我在 Python 中使用 beanstalkc 来为必须解析 URL 列表的程序进行排队。因此,我在 beanstalk 中使用 timeout 来避免任何 URL 消耗大量时间。但即使在使用它之后,我的进程也不会超时,并且需要花费大量时间来解析几个 URL。我正在使用以下代码:

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
4

1 回答 1

3

我认为您误解了 beanstalkd 的 TTR 超时的目的。引用beanstalkd 常见问题解答

TTR 是如何工作的

TTR 仅适用于保留时的作业。在这种情况下,计时器(在作业统计中称为“剩余时间”)从作业的 TTR 开始倒计时。

  • 如果计时器达到零,则作业将放回就绪队列中。
  • 如果在计时器用完之前作业被掩埋、删除或释放,则计时器不复存在。
  • 如果在计时器到达零之前“触摸”了作业,则计时器从 TTR 开始倒计时。

(未保留的作业的作业统计仍包含“剩余时间”条目,但其值无意义。)

因此,TTR 并不能帮助您“避免任何 URL 消耗大量时间”。它不会神奇地杀死您的工作进程。它所做的只是,如果工作人员在给定的时间跨度(TTR)之后没有将作业标记为已完成,beantalkd 会将作业放回队列中。

于 2011-06-28T20:30:26.960 回答