¿Debo utilizar procesos de trabajador o de hijo para ejecutar mi función?
Tengo dos archivos, main.js y job.js. Cuando se hace clic en un botón en main.js, quiero que se ejecute un nuevo proceso separado de la función en job.js.
Lo que este proceso hace es lanzar una nueva instancia del navegador puppeteer. Cuando se hace clic en el botón de detener, este proceso debe ser eliminado por pid. (Para esto utilizamos process.kill(child.pid)
?)
Entonces, ¿debería usar un worker o un child process, y si es alguno de estos dos, cómo lo implementaría para que ejecute esta función?
Nota importante: cada vez que se hace clic en el botón de inicio, me gustaría que se iniciara un nuevo proceso en ejecución de la función, para que se pueda eliminar el proceso específico con ese pid.
davy.ai
Para lograr este requisito, queremos utilizar el proceso secundario en Node.js.
Child process es un módulo que nos permite ejecutar un proceso Node.js separado y comunicarnos con él a través de flujos de entrada/salida estándar.
En el escenario actual, queremos lanzar una nueva instancia de Puppeteer en el navegador ejecutando una función en
job.js
como un proceso separado en cada clic del botón de inicio. Podemos lograr esto utilizando el métodospawn()
del proceso secundario.Así es como podemos hacerlo:
En
main.js
, primero importamos el módulochild_process
:Ahora, podemos definir la función que se ejecutará cuando se haga clic en el botón de inicio. Esta función creará un nuevo proceso secundario ejecutando la función en
job.js
. Podemos pasar cualquier argumento requerido por esta función como una matriz de cadenas.En la función anterior, utilizamos el método
spawn()
para crear un nuevo proceso secundario ejecutando el script enjob.js
. Pasamos cualquier argumento requerido al métodospawn()
como una matriz.También escuchamos dos eventos en el objeto del proceso secundario
child
: el evento'error'
y el evento'exit'
. El evento'error'
se emitirá si hay un error al crear el proceso secundario, mientras que el evento'exit'
se emitirá cuando el proceso secundario salga.Almacenamos el ID del proceso del proceso secundario en una variable accesible fuera de esta función para que podamos usarlo para matar el proceso más adelante.
Finalmente, agregamos un escucha de eventos al botón de detener que mata el proceso con el ID del proceso almacenado cuando se hace clic en el botón de detener.
Con esta implementación, cada vez que se hace clic en el botón de inicio, se iniciará un nuevo proceso que ejecuta la función en
job.js
, y un proceso específico con ese PID puede ser matado haciendo clic en el botón de detener.