En esta situación, ¿debería usar Python o JSL para el script de control principal?Ahora JMP puede conectarse sin problemas con Python, y JSL y Python pueden llamarse entre sí.
Tengo una tarea:
1. **Recibir y extraer datos (py):** Cada minuto, use el código Python para recibir datos de una API cada 3 segundos. Extraiga datos estructurados de los datos recibidos en tiempo real y almacénelos en una matriz de memoria A. Extraiga inmediatamente los datos en otra matriz de memoria B. Luego, borre inmediatamente la matriz de memoria A para preparar el siguiente lote de datos (este tiempo de procesamiento es suficiente y no causará bloqueos). Al final del minuto, use el código Python para crear una nueva tabla JMP (llamémosla Tabla A) y escriba los datos estructurados de la matriz de memoria B en esta tabla JMP. Finalmente, borre la matriz de memoria B.
2. **Concatenar y seleccionar acciones (JSL):** Use JSL para agregar los datos de la Tabla A de JMP recién creada a una Tabla B de JMP existente. Realice cálculos de selección de acciones usando indicadores técnicos en JSL en la Tabla B combinada. Luego, cierre la Tabla A de JMP.
Este proceso se repite continuamente.
¿Cuál de los siguientes dos enfoques es mejor para esta situación, con foco en el funcionamiento estable y el consumo reducido de recursos del sistema?
A. Dentro de un único script general de Python, ejecute de forma continua las partes de recepción/extracción de datos (py) y de concatenación/selección de acciones (JSL), utilizando temporizadores.
B. Dentro de un único script JSL general, ejecute de forma continua las partes de recepción/extracción de datos (py) y de concatenación/selección de acciones (JSL), utilizando temporizadores.
¡Gracias!
Automatización y scriptingVentanasRe: En esta situación, ¿debería usar Python o JSL para el script de control principal?DeepSeek R1

Re: En esta situación, ¿debería usar Python o JSL para el script de control principal?grok3

Re: En esta situación, ¿debería usar Python o JSL para el script de control principal?Escriba dos programas separados y déjelos en ejecución. Puede usar JMP para iniciar Python a través de RunProgram, o Python para iniciar JMP a través de lo que sea que use Python. Pero comience con un archivo .py y un archivo .jsl y ejecútelos manualmente hasta que se depure.
Haga que el código Python coloque el trabajo completado en un directorio con nombres de archivo con marcas de tiempo. Haga que suene una alarma si el trabajo se acumula (porque el otro trabajador ha fallado).
Haga que el código JSL se active cada 10 segundos para usar filesInDirectory para buscar trabajo nuevo. Haga que suene una alarma si pasaron más de 2 minutos desde que se encontró algún trabajo (porque el otro trabajador falló).
En los casos de Python y JMP, los programas están diseñados para repetirse indefinidamente. No se debe crear un controlador que los reinicie constantemente. Todas las comunicaciones se realizan a través del sistema de archivos, creando y eliminando archivos.
Es posible que haya una carrera entre el escritor y el lector de archivos; si JMP está leyendo una salida incompleta, simplemente espere hasta que haya dos archivos disponibles y trabaje en el penúltimo. Eso se retrasará un minuto, por supuesto.
Re: En esta situación, ¿debería usar Python o JSL para el script de control principal?¿Podría añadir una pregunta (posiblemente vaga, lo siento) sobre el mismo tema general?
Tengo una gran base de código en JSL (más de 10 000 líneas) que realiza una gran variedad de preprocesamiento secuencial, transformación, análisis y reorganización de una gran descarga automática mensual de datos que obtengo de mis RDBMS institucionales y que consta cada vez de una docena de archivos en varios formatos (xml, csv, xls, etc.).
Me estoy acercando poco a poco a la jubilación y no quiero que mi código y la muy valiosa base de datos JMP resultante, limpia y útil, se hundan en el olvido. Sin embargo, mis mejores colegas para hacerse cargo del proyecto son todos programadores de Python y no sienten demasiado entusiasmo por aprender JSL.
Mi idea es dividir mi código JSL en módulos lógicos de tamaño modesto (digamos unas 500 líneas de código), cada uno de los cuales realiza un paso bien definido en el proceso general con entradas y salidas claramente definidas. LUEGO, envolvería cada módulo en algún tipo de contenedor de Python con el que mis colegas podrían trabajar, evitando tener que aprender los detalles esenciales del JSL. También podría incluir algunos ganchos de Python en el JSL que podrían permitirles extraer información básica de resolución de problemas cuando el JSL se tope con problemas.
Mi pregunta es la siguiente: ¿cuál es el mejor video, documento técnico, capítulo de manual, hilo de discusión, libro, seminario, etc. en este sitio que pueda ayudarme (a mí, un completo novato en Python) a descubrir qué tipos de ganchos y envoltorios podrían ser las cosas que estoy buscando?... con ejemplos de código Python que controla y "husmea" el código JSL existente de esta manera.
Quizás sea una pregunta sin respuesta, pero cualquier sugerencia será bienvenida.
Re: En esta situación, ¿debería usar Python o JSL para el script de control principal?@Paul_Nelson
Re: En esta situación, ¿debería usar Python o JSL para el script de control principal?Estos podrían dar algunas ideas
Y quizás esto pero empecemos con los mencionados anteriormente
Re: En esta situación, ¿debería usar Python o JSL para el script de control principal?Dividir el JSL en componentes modulares bien definidos y documentados es lo mejor y más importante que puedes hacer.
Los scripts de Python pueden hacer un jmp.run_jsl('' script code ''') de modo que si sus rutinas se han convertido en funciones JSL, se pueden llamar desde Python. Si desea profundizar, deberá aprender Python para crear objetos basados en Python que se comporten de la manera que un programador de Python esperaría. Si puede hacer que sus rutinas sean lo suficientemente pequeñas y estén bien documentadas, su trabajo puede ser traducir de JSL a Python, siempre que el algoritmo esté bien documentado.
Además, el soporte de Python en JMP avanza con cada versión, por lo que las soluciones alternativas necesarias en 18 se pueden manejar de forma nativa en JMP 19 o 20. El enfoque actual en JMP 18 y 19 ha sido la interoperabilidad de datos. Todavía no existe un equivalente en Python de la función JSL Python Execute(), donde se envían listas de entradas, salidas y código a través del límite. Lo mejor que se puede emular sería hacer algo como.
import jmp
jmp.run_jsl('''
...
Include("Path_to_file");
v1 = Python Get("py_var1");
v2 = Python Get("py_var2");
result = my_jsl_fn(v1,v2);
Python Send(result);
...
''')
Hay cierto soporte en 19 para interoperar desde Python al poder obtener/establecer directamente el espacio de nombres global y aquí las variables del espacio de nombres directamente desde Python, por lo que el Get() de Python anterior puede no ser estrictamente necesario en JMP 19 y posteriores.
Este es un buen tema para que analicemos, para poder exponer mejor las funciones JSL al entorno Python.
Re: En esta situación, ¿debería usar Python o JSL para el script de control principal?Estoy de acuerdo con @Craige_Hales en la necesidad de probar cada camino. Cuando entran en juego grandes cantidades de datos y un alto rendimiento, no hay sustituto para las pruebas en su entorno. No hay un atajo real para decir que uno es mejor que el otro sin probar y hacer mediciones. Incluso entonces, los consejos y trucos para ajustar el rendimiento pueden ser específicos para cada lenguaje.
Hay algunos principios generales.
- No manipule, mueva ni duplique los datos más de lo estrictamente necesario.
- Preste atención a O( ) de su código. Desenrolle bucles cuando sea posible y evite algoritmos n^2 o peores.
- Minimice el acceso al sistema de archivos en áreas críticas y asegúrese de que la memoria no crezca más allá de la memoria física o tendrá que cambiar al disco.
- RAM física vs SSD local vs HDD vs unidad de red.
En la búsqueda del rendimiento absoluto, es posible que deba probar secciones de su código para ver cuál funciona más rápido, JSL o Python. Por ejemplo, puede ser más rápido procesar datos como una matriz numpy o un marco de datos de pandas y convertirlos a una tabla de datos de una sola vez en lugar de agregarlos a una tabla de datos grande en JSL (no he probado esto, así que no lo sé, solo estoy haciendo un ejemplo). Debe probar cada componente principal de la canalización cuando el rendimiento sea crítico.
Re: En esta situación, ¿debería usar Python o JSL para el script de control principal?¡¡Gracias!! Los he descargado todos y los voy a buscar.
Re: En esta situación, ¿debería usar Python o JSL para el script de control principal?Paul, muchas gracias. Tus comentarios me indican que estoy en el camino correcto. Estoy MUY agradecido por todo lo que estás haciendo por los Pythons que usan JMPing (o Pythonic JMpers). Estoy seguro de que hay muchos proyectos JSL heredados, grandes y establecidos, que no quieren ser reescritos, pero necesitan agregar mecanismos para "descomprimir su bragueta", por así decirlo (perdónenme) para que la gente de Python pueda echar un vistazo dentro.
Con gratitud, John
Re: En esta situación, ¿debería usar Python o JSL para el script de control principal?Gracias a todos los expertos por sus respuestas.
Realicé una comparación entre Python y JSL para un cálculo de indicador complejo.
El consumo de tiempo difiere en casi 10 veces.
Ejecuté la matriz completa cuando usé JSL.
Como no estoy familiarizado con Python, solo pude pedirle a varias IA que lo implementaran en Python de acuerdo con esta lógica JSL.
El resultado muestra que la modificación de grok3 es la mejor.
