[英]Puppeteer Chromium instance management
所以我已经看到了 puppeteer-cluster package 但它有非常手动的示例我的情况非常动态所以我会尽力解释。
好的,所以我有一个应用程序,用户可以在其中安排帖子。 一旦发布时间到了,puppeteer 就会运行,转到站点,使用我应用程序数据库中的凭据登录用户,然后相当简单地发布内容。
现在,当说 20 个用户都决定今天下午 1 点发帖时,问题就出现了。 现在 puppeteer 产生了 25 个 chromium 实例,这些实例由于 RAM 有限而扰乱了服务器。 我基本上要问的是如何实现以下目标:1)。 将 puppeteer 的并发限制为 10 个实例。 再多的话,它基本上应该分批进行,比如先做 10 次,然后关闭它们,然后再开始 10 次,等等 2)。 如果少于 10,则只保留正常功能。
我知道这似乎是我在给你布置家庭作业,但请相信我,我只需要一些指导、一点帮助或为我指明正确的方向就足够了。 或者如果你能告诉我如何使用这个: puppeteer-cluster动态地满足我的需要。 非常感谢!
代码片段:
const { Cluster } = require('puppeteer-cluster');
const runChunks = async (chunkArr, chunkSize) => {
//Launching cluster for each chunk
const cluster = await Cluster.launch({
concurrency: Cluster.CONCURRENCY_CONTEXT,
maxConcurrency: chunkSize, //Defined max chunksize
});
//Task to complete
await cluster.task(async ({ page, data: url }) => {
await page.goto(url);
console.log('Reached: ', url);
// Here goes the code for scraping task to complete ...
});
//Chunked array URLs queued for task completion
chunkArr.forEach(data => {
cluster.queue(data.url);
});
//Closing the cluster instance after it becomes idle
await cluster.idle();
await cluster.close();
};
function chunkArrGenerator(arr, chunkSize) {
let chunksArr = [];
let indexCounter = 0;
while (indexCounter <= (arr.length - 1)) {
chunksArr.push(arr.splice(0, chunkSize));
indexCounter++;
}
return chunksArr;
}
// assume request array having 100 objects with url data
let arr = [{ url: "https://www.amazon.in/" }, { url: "https://www.flipkart.com/" }, { url: "https://www.crateandbarrel.com/" }, { url: "https://www.cb2.com/" } /* so on ... */];
let size = 2; //chunk size
//Following line creates chunks of size 2, you change it to 10 as per your need
let chunks = chunkArrGenerator(arr, size);
//Executing each cluster on each chunk
chunks.forEach(async (chunk) => {
await runChunks(chunk, size);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.