Pregunta

estaba buscando para escribir un pequeño rastreador web en Python. Estaba empezando a investigar escribirlo como un script de multiproceso, un grupo de subprocesos de descarga y una piscina resultados del procesamiento. Debido a la GIL sería realmente hacer la descarga simultánea? ¿Cómo afecta el GIL un rastreador web? Sería cada hilo recoger algunos datos de la toma, a continuación, pasar a la siguiente conversación, deja que recoger algunos datos de la toma de corriente, etc ..?

Básicamente lo que pido es hacer un multi-hilo de oruga en pitón realmente me va a comprar mucho el rendimiento vs solo subproceso?

Gracias!

¿Fue útil?

Solución

Cuando se trata de gateando usted podría ser mejor usar algo de eventos basados ??tales como Twisted que los usos no el bloqueo de operaciones con conectores asíncronos para ir a buscar y devolver datos como viene, en lugar de bloquear en cada uno.

operaciones de red asíncronos pueden ser fácilmente y por lo general son de un solo subproceso. Red de E / S casi siempre tiene una latencia más alta que la de la CPU, ya que realmente no tienen idea de cuánto tiempo una página va a tomar para volver, y aquí es donde asíncrono brilla debido a una operación asincrónica es de peso mucho más ligero que un hilo.

Edit: Aquí está una ejemplo sencillo de cómo utilizar getPage de trenzado para crear un simple rastreador web.

Otros consejos

El GIL no se lleva a cabo por el intérprete de Python al realizar operaciones de red. Si usted está haciendo un trabajo que está en silla de red (como un rastreador), puede pasar por alto los efectos del GIL.

Por otro lado, es posible que desee medir el rendimiento si crea una gran cantidad de hilos que realizan el procesamiento (después de la descarga). La limitación del número de hilos no reducirá los efectos del GIL en su rendimiento.

Scrapy obras. Se le puede ayudar mucho. No utiliza hilos, pero puede hacer múltiples descargas "simultáneo", todos en el mismo hilo.

Si se piensa en ello, sólo tiene una sola tarjeta de red, por lo que el procesamiento en paralelo no puede realmente ayuda por definición.

Lo que hace es scrapy no espere en torno a la respuesta de una solicitud antes de enviar otro. Todo en un solo hilo.

Otra consideración: si usted está raspando un solo sitio web y los límites servidor coloca sobre la frecuencia de las solicitudes de su puede enviar desde su dirección IP, la adición de varios subprocesos puede hacer ninguna diferencia.

Sí, multithreading raspado aumenta significativamente la velocidad del proceso. Este no es un caso en el GIL es un problema. Usted está perdiendo una gran cantidad de inactividad de la CPU y ancho de banda no utilizado de espera para una solicitud a fin. Si la página web que está raspando está en su red local (un caso raro raspado), entonces la diferencia entre el multithreading y raspado solo hilo puede ser más pequeño.

Puede probar el punto de referencia el jugar con uno a "n" hilos. He escrito un simple rastreador multiproceso en Recursos web Descubriendo y me escribió un artículo relacionado en descubrimiento automatizado de feeds de blog y de Twitter, Facebook, LinkedIn cuentas conectadas a web site del negocio . Puede seleccionar el número de subprocesos para utilizar el cambio de la variable de clase NWORKERS en FocusedWebCrawler.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top