Los procesos de trabajo permiten que Guida procese elementos de cola de forma concurrente. Cada proceso de trabajo recibe su propia pestaña de navegador y su propio contexto de elemento de cola.
// Procesos de trabajo paralelos - Procesar elementos de cola de forma concurrente//// Los procesos de trabajo ejecutan elementos de cola en paralelo,// cada uno en su propia pestana de navegador. Este script configura// un grupo de procesos de trabajo que procesa una cola con varias// pestanas en paralelo.// Requiere un espacio de trabajo abierto.
const queueName = "sites_to_check";
// Primero, encolar algunos elementos de trabajoconst sites = [ { url: "https://example.com", name: "Example" }, { url: "https://httpbin.org", name: "HTTPBin" }, { url: "https://jsonplaceholder.typicode.com", name: "JSONPlaceholder" }];
for (const site of sites) { g.queue.enqueue(queueName, site);}g.log("Encolados " + sites.length + " sitios");
// Iniciar un grupo de procesos de trabajo con 2 pestanas concurrentes// Cada proceso ejecuta 'scripts/check-site.js' por elementog.workers.start({ clearTabs: true, layout: "vertical", workers: [{ queue: queueName, script: "scripts/check-site.js", concurrency: 2, throttle: { requestsPerMinute: 30 } }]});
g.log("Grupo de procesos de trabajo iniciado. Observe el panel Task Manager.");g.log("Los procesos de trabajo procesaran elementos de forma independiente.");g.log("Use g.workers.status() para comprobar el progreso.");g.log("Use g.workers.stop() para detener el grupo.");
// ---- En scripts/check-site.js escribiria: ----//// // Obtener el contexto del proceso de trabajo (pestana asignada + elemento de cola)// const ctx = g.worker.getContext();// const tabOpts = { browserTabId: ctx.tabId };//// // Navegar en la pestana propia del proceso de trabajo// await g.nav.navigateToUrl(ctx.item.data.url, tabOpts);//// // Extraer datos de la pagina// const title = await g.page.executeJS("document.title", tabOpts);//// // Guardar resultado en el almacen// g.store.put("site_checks", ctx.item.data.name, {// title: title,// url: ctx.item.data.url,// checkedAt: new Date().toISOString()// });//// // Confirmar para eliminar el elemento de la cola (obligatorio)// g.queue.commit(ctx.item.id);