Domanda

Uno script web crawler che depone le uova al massimo di 500 thread e ogni thread richiede fondamentalmente per alcuni dati servite dal server remoto, che la risposta di ogni server è diverso nel contenuto e le dimensioni degli altri.

Sono la creazione STACK_SIZE come 756K di per filetti

threading.stack_size(756*1024)

, che mi permette di avere un numero sufficiente di thread richiesti e completare la maggior parte dei posti di lavoro e le richieste. Ma, come le risposte dei server sono più grandi di altri, e quando un thread ottiene questo tipo di risposta, lo script muore con SIGSEGV.

stack_sizes più di 756K rende impossibile avere il numero desiderato di fili contemporaneamente.

qualche suggerimento su come posso continuare con data STACK_SIZE senza crash? E come posso ottenere la corrente STACK_SIZE utilizzato di un dato filo?

È stato utile?

Soluzione

Perché diavolo stai deposizione delle uova 500 discussioni? Che sembra una pessima idea!

Rimuovi filettatura completamente, utilizzare un ciclo di eventi per fare la scansione. Il tuo programma sarà più veloce, più semplice e più facile da mantenere.

Un sacco di thread in attesa per la rete non renderà il vostro programma di aspettare più veloce . Invece, raccogliere tutti i socket aperti in un elenco ed eseguire un ciclo in cui si controlla se qualcuno di loro ha dati disponibili.

Mi consiglia di utilizzare ritorto - Si tratta di un motore di networking event-driven. E 'molto flexile, sicura, scalabile e molto stabile (nessun segfaults).

Si potrebbe anche dare un'occhiata a Scrapy - Si tratta di una scansione web e quadro scraping schermo scritto in Python / ritorto . E 'ancora in fase di sviluppo, ma forse si può prendere alcune idee.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top