← Zurück zu den Rezepten

Parallele Worker ausführen

Queue-Items erstellen und einen Worker-Pool starten, der sie parallel in Browser-Tabs verarbeitet.

Warteschlangen und Worker Fortgeschritten JavaScript parallel_workers.js

Voraussetzungen

  • Ein geöffneter Guida-Arbeitsbereich
  • Ein Worker-Skript unter scripts/check-site.js

Erwartetes Ergebnis

Guida reiht Site-Prüfungen ein und startet einen Worker-Pool mit zwei parallelen Browser-Tabs.

Verwandte Dokumentation

Warteschlangen-WorkerTask-Manager

Quellbeispiel

parallel_workers.js

Worker lassen Guida Queue-Items parallel verarbeiten. Jeder Worker erhält seinen eigenen Browser-Tab und Queue-Kontext.

// Parallele Worker - Queue-Items gleichzeitig verarbeiten
//
// Worker laufen parallel, jeder in seinem eigenen Browser-Tab.
// Voraussetzung: offener Arbeitsbereich.
const queueName = "sites_to_check";
// Zuerst Arbeit einreihen
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(sites.length + " Sites eingereiht");
// Worker-Pool mit 2 parallelen Tabs starten
g.workers.start({
clearTabs: true,
layout: "vertical",
workers: [{
queue: queueName,
script: "scripts/check-site.js",
concurrency: 2,
throttle: {
requestsPerMinute: 30
}
}]
});
g.log("Worker-Pool gestartet. Beobachten Sie den Task-Manager.");
g.log("Worker verarbeiten Items unabhängig voneinander.");
g.log("Mit g.workers.status() prüfen Sie den Fortschritt.");
g.log("Mit g.workers.stop() stoppen Sie den Pool.");
// ---- In scripts/check-site.js könnte stehen: ----
//
// const ctx = g.worker.getContext();
// const tabOpts = { browserTabId: ctx.tabId };
//
// await g.nav.navigateToUrl(ctx.item.data.url, tabOpts);
// const title = await g.page.executeJS("document.title", tabOpts);
//
// g.store.put("site_checks", ctx.item.data.name, {
// title: title,
// url: ctx.item.data.url,
// checkedAt: new Date().toISOString()
// });
//
// g.queue.commit(ctx.item.id);