0

python-rq を実装してドメインをキューに渡し、Beautiful Soup を使用してスクレイピングします。だから私は仕事を成し遂げるために複数の労働者を走らせています。現在 22 個のワーカーを開始し、22 個のワーカーすべてが rq ダッシュボードに登録されています。しかし、しばらくするとワーカーが自動的に停止し、ダッシュボードに表示されなくなります。しかし、webmin では、すべてのワーカーが実行中として表示されます。クロールの速度も低下しました。つまり、ワーカーは実行されていません。スーパーバイザーとnohupを使用してワーカーを実行してみました。どちらの場合も、ワーカーは自動的に停止します。

これの理由は何ですか?なぜ労働者は自然に止まるのですか?また、1 つのサーバーで開始できるワーカーの数は?

それに伴い、ワーカーが rq ダッシュボードから登録解除されるたびに、失敗数が増加します。なぜだか分からない?

これで私を助けてください。ありがとうございました

4

1 に答える 1

0

さて、私は問題を理解しました。ワーカーのタイムアウトが原因でした。

try:
  --my code goes here--
except Exception, ex:
  self.error += 1
  with open("error.txt", "a") as myfile:
     myfile.write('\n%s' % sys.exc_info()[0] + "{}".format(self.url))
  pass

したがって、私のコードによると、各ドメインから 200 個の URL が取得されると、次のドメインがキューから取り出されます。しかし、一部のドメインでは、条件を終了するのに十分な数の URL がありませんでした (1 つまたは 2 つの URL のみなど)。

コードはすべての例外をキャッチし、error.txtファイルに追加するためです。rq タイムアウト例外rq.timeouts.JobTimeoutExceptionもキャッチされ、ファイルに追加されました。したがって、ワーカーを一定時間待機させ、ワーカーxの終了につながります。

于 2016-06-29T09:59:05.980 に答える