Prima di tutto: il GIL non si applica alla multielaborazione, solo al threading, e non è un grosso problema come sembra che la gente lo capisca. Per uno, quando si utilizza un I / O di rete o di file, il blocco viene rilasciato, quindi tutto ciò che raschia i siti Web non è probabile che veda i colli di bottiglia delle prestazioni a causa del GIL.
Il modulo subprocess
ha lo scopo di chiamare i processi arbitrari dal tuo programma , praticamente tutto ciò che puoi eseguire dalla riga di comando sulla macchina è un gioco leale per questo modulo.
Il multiprocessing
modulo d'altra parte, ha lo scopo di rendere il lavoro di distribuzione su più processi Python come facile come usare thread per lo stesso tipo di lavoro. È il modulo che dovresti esaminare se desideri implementare lo scraping del sito distribuito utilizzando più processi.
Detto questo, perché non dai un'occhiata a Scrapy , invece:
Scrapy is a fast high-level screen scraping and web crawling framework, used to crawl websites and extract structured data from their pages. It can be used for a wide range of purposes, from data mining to monitoring and automated testing.
Scrapy utilizza un approccio al ciclo basato sugli eventi anziché utilizzare più thread o processi per risolvere il problema di "I / O di rete lento". Un ciclo di eventi commuta tra diverse attività nel programma quando i dati di rete (o qualsiasi altro I / O) sono in sospeso. Anziché attendere che i dati di rete entrino prima di continuare, un ciclo di eventi passa a un'attività diversa invece di lasciarlo al sistema operativo per informare il programma quando i dati di rete sono arrivati.
Se Scrapy non si adatta alle tue esigenze specifiche, puoi comunque utilizzare lo stesso trucco. Dai uno sguardo ai seguenti framework per aiutarti a fare la stessa cosa nel tuo programma:
Scrapy usa twisted
, se questo fa la differenza per te.