web-dev-qa-db-ja.com

Scrapyはシングルスレッドですか、それともマルチスレッドですか?

Scrapyには、 CONCURRENT_REQUESTS のような並行性設定はほとんどありません。 Scrapyクローラーがマルチスレッドであることを意味しますか?それで、scrapy crawl my_crawlerを実行すると、文字通り複数の同時リクエストが並行して発生しますか? Scrapyがシングルスレッドであることを読んだので、私は尋ねています。

16
Gill Bates

Scrapyは、インタラクティブシェルと一部のテストを除いて、シングルスレッドです。 source を参照してください。

これは Twisted の上に構築されており、これもシングルスレッドであり、 twisted.internet.interfaces.IReactorThreads.callFromThreadなどの独自の非同期同時実行機能を利用します。source を参照してください。

12
famousgarkin

Scrapyは、ほとんどの作業を同期的に実行します。ただし、リクエストの処理は非同期で行われます。

まだご覧になっていない方は、このページをお勧めします。

http://doc.scrapy.org/en/latest/topics/architecture.html

編集:今の質問はスレッド化に関するものであり、必ずしも非同期であるかどうかではないことに気付きました。そのリンクはまだ良い読み物ですが:)

cONCURRENT_REQUESTSに関する質問について。この設定は、twistedが一度に延期するリクエストの数を変更します。その数のリクエストが開始されると、いくつかのリクエストが終了するのを待ってから、さらに開始します。

6
rocktheartsm4l

Scrapyはシングルスレッドフレームワークであり、スパイダー内で同時に複数のスレッドを使用することはできません。ただし、複数のスパイダーとピップラインを同時に作成して、プロセスを並行させることができます。 Scrapyは、multi-threadingであるTwistedに基づいて構築されているため、Asynchronous http protocol frameworkをサポートしていません。

1
Aman Garg