Tiempo de espera de la función de pruebaTengo una única secuencia de comandos que llama a muchas otras secuencias de comandos para informar procesos sobre equipos e informes de construcción. A veces, los datos que provienen de las herramientas de proceso incluyen errores que JMP no puede manejar.Así que he envuelto las llamadas en una función Try() como esta:
For(ii=1, ii < nitems(BulkScriptsToRun), ii++,
try(
Include( BulkScriptsToRun[ii] );
);
);
A veces, el script incluido no falla, pero tampoco finaliza.
Si bien esto probablemente podría solucionarse editando el script y cómo procesa los datos, no son mis scripts para editar.
¿Hay alguna forma de que la función de prueba considere que la prueba es un error si tarda más de 1 hora, por ejemplo?
¿Hay otra manera de lograr esto? ¿Hay alguna manera de decirle al Try() que debería darse por vencido?
Gracias
secuencias de comandosRe: Tiempo de espera de la función de pruebaNo, try() no tiene un mecanismo de tiempo de espera; es muy similar al mecanismo try-throw-catch de C++. Como está adivinando, necesitaría poner la lógica en cada uno de los scripts incluidos, lo que podría hacer algo como
startSeconds = tickSeconds();
...
while(...
if( tickseconds() - startSeconds > 100, throw("Used more than 100 seconds") );
...)
Sé que dijiste que no puedes abrir esos scripts para editarlos, pero si lo hiciste, es posible que desees que realicen una devolución de llamada a tu código para indicar el progreso. Entonces podría hacer el lanzamiento desde la devolución de llamada si es necesario. De cualquier manera, necesitaría encontrar un punto en cada uno de los scripts donde un bucle repite algo, y el tiempo de espera depende de que el script se comporte razonablemente bien (para seguir revisando el tiempo).
El programador de tareas de Windows también podría ser parte de la solución; No lo he usado, pero ha habido una serie de hilos que hacen preguntas al respecto. ¿Puedo cerrar el programa jmp desde un script?podría sugerir algo.
Re: Tiempo de espera de la función de pruebaEsto suena como algo que podría hacerse con el Programador de tareas de Windows si no puede modificar los scripts. Cree un script que incluya los otros scripts, administre todos los errores que pueda en su script de "inclusión" y agregue tiempo de espera a la tarea de los programadores. Después de que se agote el tiempo, terminará la ejecución donde sea que haya llegado.
En general, ejecutar un lote de scripts sobre los que no tiene control puede complicarse rápidamente porque es posible que deba manejar muchas cosas diferentes (he tenido que hacer algo como esto). A continuación se presentan algunos problemas (u oportunidades de mejora) que enfrenté:
- Administrar la colisión de espacios de nombres
- Eliminar/Borrar símbolos innecesarios
- Sobrevivir a una situación en la que los scripts no usan Nombres predeterminados aquí (1)
- Sobrevivir con el uso de Borrar símbolos/Eliminar valores globales en el script incluido
- Cierre tablas de datos e informes innecesarios para ahorrar memoria
- Captura de errores que detendrían JMP
- Uso de Exit/Quit en los scripts incluidos
- Registre la ejecución del script para saber qué se ejecutó correctamente
La mayoría de estos son mucho más fáciles de manejar entrenando/modificando los scripts que se incluyen.