2014-07-15 11 views
12

Ci sono poche impostazioni di concorrenza in Scrapy, come CONCURRENT_REQUESTS. Significa, che Scrapy crawler è multi-threaded? Quindi, se corro scrapy crawl my_crawler letteralmente sparerà più richieste simultanee in parallelo? Mi sto chiedendo perché, ho letto che Scrapy è single-threaded.è Scrapy single-threaded o multi-threaded?

+4

Scrapy utilizza Twisted e utilizza un modello di programmazione asincrona a thread singolo. Puoi leggere a riguardo [in] (http://krondo.com/wp-content/uploads/2009/08/twisted-intro.html) [vari] (http://krondo.com/wp-content/uploads /2009/08/twisted-intro.html) [places] (http://jessenoller.com/blog/2009/02/11/twisted-hello-asynchronous-programming) –

risposta

8

Scrapy è a thread singolo, tranne la shell interattiva e alcuni test, vedere source.

'costruito in cima Twisted, che è a thread singolo troppo, e fa uso delle proprie capacità concorrenza asincrone, come twisted.internet.interfaces.IReactorThreads.callFromThread, vedi source.

+3

Qual è il punto di queste impostazioni allora? –

+1

Asincronismo significa che possono esserci più richieste simultanee. Puoi inviare una richiesta A, e prima che sia restituita fai un'altra richiesta B, quindi hai due richieste parallele. –

+0

Stavo cercando di scrivere i risultati del mio scraping in un singolo file di testo. So che capisco che è una brutta cosa ... o no? – deostroll

4

Scrapy fa la maggior parte del lavoro in modo sincrono. Tuttavia, la gestione delle richieste viene eseguita in modo asincrono.

Suggerisco questa pagina se non l'hai già visto.

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

edit: Mi rendo conto ora la questione era di circa threading e non necessariamente se è asincrona oppure no. Quel collegamento sarebbe comunque una buona lettura :)

riguardo alla tua domanda su CONCURRENT_REQUESTS. Questa impostazione modifica il numero di richieste che il doppino si differenzierà in una sola volta. Una volta che molte richieste sono state avviate, aspetterà che alcune di esse finiscano prima di iniziare di più.

1

Scrapy è un framework a thread singolo, non è possibile utilizzare più thread all'interno di uno spider allo stesso tempo. Tuttavia, possiamo creare più spider e piplines contemporaneamente per rendere il processo simultaneo. Scrapy non supporta multi-threading perché è costruito su Twisted, che è un Asynchronous http protocol framework.