Hilos de Python stack_size y segfaults
multithreading segmentation-fault (1)
Una secuencia de comandos del rastreador web que genera como máximo 500 hilos y cada uno de los hilos básicamente solicita ciertos datos servidos desde el servidor remoto, que la respuesta de cada servidor es diferente en contenido y tamaño de los demás.
estoy configurando stack_size como 756K para hilos
threading.stack_size(756*1024)
lo que me permite tener la cantidad suficiente de hilos necesarios y completar la mayoría de los trabajos y solicitudes. Pero como las respuestas de algunos servidores son más grandes que otras, y cuando un hilo obtiene ese tipo de respuesta, el script muere con SIGSEGV.
stack_sizes más de 756K hace que sea imposible tener el número requerido de subprocesos al mismo tiempo.
¿Alguna sugerencia sobre cómo puedo continuar con stack_size sin bloqueos? y ¿cómo puedo obtener el stack_size usado actual de un hilo dado?
¿Por qué demonios estás generando 500 hilos? ¡Parece una idea terrible!
Elimine el enhebrado por completo, use un bucle de evento para hacer el rastreo. Su programa será más rápido, más simple y más fácil de mantener.
Muchos hilos esperando por la red no harán que su programa espere más rápido . En su lugar, recopile todos los sockets abiertos en una lista y ejecute un bucle donde verifique si alguno de ellos tiene datos disponibles.
Recomiendo usar Twisted : es un motor de red basado en eventos. Es muy flexible, seguro, escalable y muy estable (sin segfaults).
También puedes echarle un vistazo a Scrapy : es un marco de rastreo web y de captura de pantalla escrito en Python / Twisted. Todavía está bajo un gran desarrollo, pero tal vez puedas tomar algunas ideas.