← Torna alle soluzioni

Eseguire processi di lavoro paralleli

Crea elementi di coda e avvia un pool di processi di lavoro che li elabora in schede del browser parallele.

Code e processi di lavoro Intermedio JavaScript parallel_workers.js

Prerequisiti

  • Uno spazio di lavoro Guida aperto
  • Uno script di processo di lavoro salvato in scripts/check-site.js

Risultato atteso

Guida mette in coda controlli sito e avvia un pool di processi di lavoro con due schede del browser concorrenti.

Esempio di codice sorgente

parallel_workers.js

I processi di lavoro permettono a Guida di elaborare elementi di coda in concorrenza. Ogni processo riceve la propria scheda del browser e il proprio contesto elemento di coda.

// Processi di lavoro paralleli: elabora elementi di coda in concorrenza
//
// I processi di lavoro eseguono elementi di coda in parallelo,
// ciascuno nella propria scheda del browser. Questo script imposta
// un pool che elabora una coda con più schede affiancate.
// Richiede uno spazio di lavoro aperto.
const queueName = "sites_to_check";
// Prima, metti in coda alcuni elementi di lavoro
const 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("Messi in coda " + sites.length + " siti");
// Avvia un pool con 2 schede concorrenti
// Ogni processo esegue 'scripts/check-site.js' per elemento
g.workers.start({
clearTabs: true,
layout: "vertical",
workers: [{
queue: queueName,
script: "scripts/check-site.js",
concurrency: 2,
throttle: {
requestsPerMinute: 30
}
}]
});
g.log("Pool di processi di lavoro avviato. Guarda il pannello Gestore attività.");
g.log("I processi elaboreranno gli elementi in modo indipendente.");
g.log("Usa g.workers.status() per controllare l'avanzamento.");
g.log("Usa g.workers.stop() per fermare il pool.");
// ---- In scripts/check-site.js scriveresti: ----
//
// // Ottieni il contesto del processo (scheda assegnata + elemento di coda)
// const ctx = g.worker.getContext();
// const tabOpts = { browserTabId: ctx.tabId };
//
// // Naviga nella scheda propria del processo
// await g.nav.navigateToUrl(ctx.item.data.url, tabOpts);
//
// // Estrai dati dalla pagina
// const title = await g.page.executeJS("document.title", tabOpts);
//
// // Salva il risultato nello spazio di archiviazione
// g.store.put("site_checks", ctx.item.data.name, {
// title: title,
// url: ctx.item.data.url,
// checkedAt: new Date().toISOString()
// });
//
// // Commit per rimuovere l'elemento dalla coda (obbligatorio)
// g.queue.commit(ctx.item.id);