es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Python: ¿Debo usar hilos para monitorear una gran cantidad de señales de entrada y salida (E/S)?

Estoy construyendo un algoritmo de trading en Python.
Leo datos de una API de un bróker, que me permite suscribirme para recibir datos del mercado de diversos valores.

Estoy tratando de encontrar patrones en el precio de las opciones. Idealmente, me suscribiría a miles de datos en tiempo real de opciones y trataría de detectar mis patrones allí.

Dado que parece ser una situación limitada por la E/S, ya que estoy esperando eventos comerciales que ocurren esporádicamente, opté por usar hilos: creo un hilo por cada valor y lo hago esperar a que aparezca el patrón.
También creo otros hilos auxiliares, como un hilo adicional por cada hilo de monitoreo de mercado, que espera un evento de detención para detener el hilo de monitoreo del mercado…

Ahora que tengo unos cuantos hilos por cada valor monitoreado, me doy cuenta de que con solo unas pocas cadenas de opciones, me encuentro con el error “RuntimeError: no se puede iniciar un nuevo hilo”. Utilicé la respuesta a esta pregunta para calcular que el límite de mi configuración era de 884 hilos, lo cual es demasiado bajo para la aplicación que tenía en mente para mis hilos.

Estoy bastante sorprendido, pensé que los hilos en Python eran solo un concepto abstracto para dividir el tiempo de CPU. En ese caso, ¿por qué no puedo crear un número arbitrario de hilos corriendo el riesgo de tener muy poco tiempo de CPU para cada uno? Si los hilos no son una elección inteligente para esta aplicación, ¿hay alguna mejor?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en tecnología de la información especializado en Python y trading algorítmico, recomiendo explorar soluciones alternativas ya que los hilos (threads) pueden no ser la mejor opción para esta aplicación. Aunque los hilos en Python se utilizan para dividir el tiempo de CPU entre diferentes tareas, están limitados por el Bloqueo Global del Intérprete (GIL), lo que significa que solo un hilo puede ejecutar bytecode de Python a la vez. Esto puede provocar retrasos y disminución de la eficiencia, especialmente en situaciones con E/S intensiva.

    Una mejor alternativa sería utilizar la programación asíncrona con bibliotecas como asyncio o Twisted, que permiten la ejecución concurrente de múltiples tareas sin la necesidad de hilos múltiples. Otra opción podría ser utilizar el multiprocesamiento, que crea procesos separados que se ejecutan de manera concurrente y pueden aprovechar múltiples núcleos de CPU.

    En cuanto al problema de alcanzar el límite de hilos, cabe mencionar que este límite depende de la plataforma y se puede aumentar ajustando los parámetros del sistema. Sin embargo, esta puede que no sea una solución sostenible a largo plazo y es posible que no aborde las ineficiencias subyacentes de utilizar hilos para una aplicación con E/S intensiva.

    En general, para construir un algoritmo de trading en Python y detectar patrones en los precios de opciones, el uso de soluciones alternativas como la programación asíncrona o el multiprocesamiento puede conducir a un mejor rendimiento y eficiencia que el uso de hilos.

Comments are closed.