Scrapyには、 CONCURRENT_REQUESTS のような並行性設定はほとんどありません。 Scrapyクローラーがマルチスレッドであることを意味しますか?それで、scrapy crawl my_crawler
を実行すると、文字通り複数の同時リクエストが並行して発生しますか? Scrapyがシングルスレッドであることを読んだので、私は尋ねています。
Scrapyは、インタラクティブシェルと一部のテストを除いて、シングルスレッドです。 source を参照してください。
これは Twisted の上に構築されており、これもシングルスレッドであり、 twisted.internet.interfaces.IReactorThreads.callFromThread
などの独自の非同期同時実行機能を利用します。 、 source を参照してください。
Scrapyは、ほとんどの作業を同期的に実行します。ただし、リクエストの処理は非同期で行われます。
まだご覧になっていない方は、このページをお勧めします。
http://doc.scrapy.org/en/latest/topics/architecture.html
編集:今の質問はスレッド化に関するものであり、必ずしも非同期であるかどうかではないことに気付きました。そのリンクはまだ良い読み物ですが:)
cONCURRENT_REQUESTSに関する質問について。この設定は、twistedが一度に延期するリクエストの数を変更します。その数のリクエストが開始されると、いくつかのリクエストが終了するのを待ってから、さらに開始します。
Scrapyはシングルスレッドフレームワークであり、スパイダー内で同時に複数のスレッドを使用することはできません。ただし、複数のスパイダーとピップラインを同時に作成して、プロセスを並行させることができます。 Scrapyは、multi-threading
であるTwisted
に基づいて構築されているため、Asynchronous http protocol framework
をサポートしていません。