7 votos

¿Puede ser multiproceso Applescript?

Estoy escribiendo un Applescript para Spotify, que se supone que debe hacer dos cosas:

  1. Registro de cada nueva canción.
  2. Cada N segundos comprobar lo que el sonido que se utiliza el dispositivo.

I do (1) por un simple bucle que comprobar cómo gran parte de la pista de los restos y, a continuación, utilizar ese valor en un retraso de la declaración en el bucle (necesario para ejecutar el bucle a toda velocidad). Sin embargo, N generalmente es mucho menor que el tiempo restante de la pista actual. Por lo tanto, me gustaría tarea (2) a ejecutar en un ciclo aparte con N-0,5 como valor de retardo. Básicamente quiero bucles se ejecutan simultáneamente desde el mismo guión. Es esto posible?

(Por supuesto, yo podría utilizar dos guiones diferentes, pero necesito distribuir esta solución cuando se hace, por tanto, menos visual de la complejidad - es decir, dos scripts que se ejecutan simultáneamente ocupando espacio en el Dock, que necesitan ser lanzado etc - es mejor).

2voto

Oskar Puntos 1242

No es fácil. El concepto de procesos y subprocesos no está contenido en AppleScript.

Querrá otra herramienta para ese trabajo. SWIFT puede ser bueno a menos que usted está buscando para python o algo un poco más establecido.

2voto

Steve Evans Puntos 155

El Lenguaje De Los Límites De

AppleScript no soporta multithreading dentro de una única secuencia de comandos.

Límites De Aplicación

Además de la AppleScript que el lenguaje en sí no representa hilos, el llamado de la aplicación es raro que lidiar con AppleEvents en un hilo de forma óptima. AppleEvents están en la cola de macOS en un First-In First-Out (FIFO) para el procesamiento de la aplicación.

La aplicación puede diferir respuestas de larga duración AppleEvents pero esto requiere adicionales de ingeniería que algunas aplicaciones de implementar. La mayoría de las aplicaciones se bloqueará hasta que el AppleEvent se procesa antes de pasar a la siguiente AppleEvent.

Esto significa multi-hilo de AppleScript hablando sola aplicación es probable que no vea las mejoras de rendimiento que se espera para el esfuerzo.

Solo Bucle De Eventos?

Usted podría abordar el problema con un solo bucle tratar con varios eventos. El bucle único podía dormir por N segundos, estela y lidiar con la pendiente adecuada de las tareas.

0voto

David Fekke Puntos 1

Te sugiero escribir esto en JavaScript, en lugar de AppleScript. JavaScript es un lenguaje compatible para eventos Apple script. JavaScript es solo rosca, pero es mucho más fácil escribir código asíncrono sin bloqueos.

setInterval(function() {
    console.log('Do something in the closure function here');
}, 3000);

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X