1

URLのリストを解析する必要があるプログラムのキューイングプロセスに、Pythonでbeanstalkcを使用しています。したがって、任意の URL による膨大な時間の消費を避けるために、Beanstalk でタイムアウトを使用しています。しかし、それを使用した後でも、私のプロセスは制限内でタイムアウトせず、いくつかの 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 FAQの引用:

TTR の仕組み

TTR は、予約された時点でのみジョブに適用されます。そのイベントで、タイマー (ジョブ統計では「残り時間」と呼ばれます) がジョブの TTR からカウントダウンを開始します。

  • タイマーがゼロになると、ジョブは準備完了キューに戻されます。
  • タイマーが切れる前にジョブが埋められたり、削除されたり、解放されたりすると、タイマーは存在しなくなります。
  • タイマーがゼロになる前にジョブが「タッチ」された場合、タイマーは TTR からカウントダウンを開始します。

(予約されていないジョブのジョブ統計には「残り時間」エントリが含まれていますが、その値は無意味です。)

したがって、TTR は「任意の URL による膨大な時間の消費を回避する」という点では役に立ちません。ワーカー プロセスを魔法のように強制終了するわけではありません。ワーカーが所定の期間 (TTR) 後にジョブを完了としてマークしない場合、beanstalkd がジョブをキューに戻すだけです。

于 2011-06-28T20:30:26.960 に答える