我在Python中使用beanstalkc进行程序的排队过程,该程序必须解析URL列表。因此,我在 beanstalk 中使用超时来避免任何 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
我认为您误解了 beanstalk 的 TTR 超时的目的。引用豆茎常见问题解答:
TTR 如何工作
TTR 仅适用于处于保留状态的作业。在该事件中,计时器(在作业统计信息中称为"剩余时间"(从作业的 TTR 开始倒计时。
- 如果计时器达到零,作业将放回就绪队列中。
- 如果在计时器用完之前埋没、删除或释放作业,则计时器将不复存在。
- 如果在计时器达到零之前"触摸"作业,则计时器将从 TTR 开始倒计时。
(未预留作业的作业统计信息仍包含"剩余时间"条目,但其值毫无意义。
因此,TTR 无法帮助您"避免任何 URL 消耗大量时间"。它不会神奇地杀死您的工作进程。它所做的只是 beanstalkd 将作业放回队列中,如果工作线程在给定的时间跨度 (TTR( 后未将作业标记为已完成。