← 레시피로 돌아가기

병렬 워커 실행하기

큐 항목을 만들고 여러 브라우저 탭에서 병렬 처리하는 워커 풀을 시작합니다.

큐와 워커 중급 JavaScript parallel_workers.js

전제 조건

  • 열려 있는 Guida 워크스페이스
  • scripts/check-site.js에 저장된 워커 스크립트

예상 결과

Guida가 사이트 확인 항목을 큐에 넣고, 동시 브라우저 탭 2개를 가진 워커 풀을 시작합니다.

관련 문서

큐 워커Task Manager

소스 예제

parallel_workers.js

워커를 사용하면 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);