← Voltar às receitas

Executar processos de trabalho em paralelo

Crie itens de fila e inicie um grupo de processos de trabalho que os processa em guias de navegador paralelas.

Filas e processos de trabalho Intermediário JavaScript parallel_workers.js

Pré-requisitos

  • Um espaço de trabalho Guida aberto
  • Um script de processo de trabalho salvo em scripts/check-site.js

Resultado esperado

O Guida enfileira verificações de sites e inicia um grupo de processos de trabalho com duas guias de navegador concorrentes.

Exemplo de código-fonte

parallel_workers.js

Processos de trabalho permitem que o Guida processe itens de fila de forma concorrente. Cada processo recebe sua própria guia do navegador e contexto de item de fila.

// Processos de trabalho paralelos — processar itens de fila concorrentemente
//
// Processos de trabalho executam itens de fila em paralelo, cada um em sua
// própria guia do navegador. Este script configura um grupo
// que processa uma fila com várias guias lado a lado.
// Requer um espaço de trabalho aberto.
const queueName = "sites_to_check";
// Primeiro, enfileirar alguns itens de trabalho
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("Enfileirados " + sites.length + " sites");
// Iniciar um grupo de processos de trabalho com 2 guias concorrentes
// Cada processo executa 'scripts/check-site.js' por item
g.workers.start({
clearTabs: true,
layout: "vertical",
workers: [{
queue: queueName,
script: "scripts/check-site.js",
concurrency: 2,
throttle: {
requestsPerMinute: 30
}
}]
});
g.log("Grupo de processos de trabalho iniciado. Observe o painel Task Manager.");
g.log("Processos de trabalho processarão itens de forma independente.");
g.log("Use g.workers.status() para verificar o progresso.");
g.log("Use g.workers.stop() para parar o grupo.");
// ---- Em scripts/check-site.js você escreveria: ----
//
// // Obter o contexto do processo (guia atribuída + item de fila)
// const ctx = g.worker.getContext();
// const tabOpts = { browserTabId: ctx.tabId };
//
// // Navegar na guia própria do processo
// await g.nav.navigateToUrl(ctx.item.data.url, tabOpts);
//
// // Extrair dados da página
// const title = await g.page.executeJS("document.title", tabOpts);
//
// // Salvar resultado no armazenamento
// g.store.put("site_checks", ctx.item.data.name, {
// title: title,
// url: ctx.item.data.url,
// checkedAt: new Date().toISOString()
// });
//
// // Confirmar para remover item da fila (obrigatório!)
// g.queue.commit(ctx.item.id);