워커를 사용하면 Guida가 큐 항목을 병렬 처리할 수 있습니다. 각 워커는 자체 브라우저 탭과 큐 항목 문맥을 받습니다.
// 병렬 워커 - 큐 항목 동시 처리//// 워커는 큐 항목을 병렬로 처리하며 각각 전용// 브라우저 탭을 사용합니다. 이 스크립트는 여러 탭에서// 큐를 처리하는 워커 풀을 설정합니다.// 열린 워크스페이스가 필요합니다.
const queueName = "sites_to_check";
// 먼저 작업 항목을 큐에 넣기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 + "개");
// 동시 탭 2개를 가진 워커 풀 시작// 각 워커는 항목마다 'scripts/check-site.js'를 실행합니다g.workers.start({ clearTabs: true, layout: "vertical", workers: [{ queue: queueName, script: "scripts/check-site.js", concurrency: 2, throttle: { requestsPerMinute: 30 } }]});
g.log("워커 풀을 시작했습니다. Task Manager 패널을 확인하세요.");g.log("워커는 항목을 독립적으로 처리합니다.");g.log("진행 상황은 g.workers.status()로 확인할 수 있습니다.");g.log("풀을 멈추려면 g.workers.stop()을 사용합니다.");
// ---- scripts/check-site.js에는 다음과 같이 작성합니다: ----//// // 워커 문맥(할당된 탭 + 큐 항목)을 가져옵니다// 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()// });//// // 항목을 큐에서 제거하기 위해 commit합니다(필수)// g.queue.commit(ctx.item.id);