2016-11-25 4 views

答えて

0

これは、GNU timeoutコマンドで実行できます。例えば

は、1時間後にクローラを停止する:

timeout 3600 scrapy crawl spider_name 
0

Scrapyは、指定された期間の後にクロールを停止するCLOSESPIDER_TIMEOUTオプションを提供します。

これはハードリミットではありません。既にダウンロードしているすべてのリクエストは処理されますが、スケジューラから新しいリクエストは取得されません。つまり、CLOSESPIDER_TIMEOUTはCtrl-CではなくCtrl-Cをエミュレートし、蜘蛛gracefulyを停止しようとします。スパイダーを殺すことは、例えば、エクスポートされたデータファイルは破損したままにします。

どのくらいの余分な時間が生き残るかは、ウェブサイトと再試行時に同時実行の設定&に依存します。デフォルトのDOWNLOAD_TIMEOUTは180秒です。リクエストは2回まで再試行できます。つまり、最悪の場合に各リクエストが10分以上かかることがあります。 CONCURRENT_REQUESTSはデフォルトで16であるため、ダウンローダーには最大16個のリクエストがありますが、クロールする内容に応じて並行してダウンロードできます。 AutotrottleまたはCONCURRENT_REQUESTS_PER_DOMAINオプションは、単一ドメインに対して並列に実行される要求の数を制限することがあります。

したがって、絶対的に最悪の場合(順次ダウンロードでは、すべての要求が応答不能になり、2回再試行されます)、スパイダーはデフォルト設定で約3時間ハングすることがあります。しかし、実際には、通常、この時間はずっと短く、数分です。 CLOSESPIDER_TIMEOUTに値を設定することができます。あなたのX時間よりも20分少なくしてください。そして、シャットダウン時間が超長ければ、ハード・タイムアウトを実装し、スパイダーを殺すために追加のスーパーバイザー(@lufteが提案するGNUタイムアウトのようなもの)を使用してください。

関連する問題