如何以低优先级启动人偶进程?

时间:2018-09-10 20:39:49

标签: node.js google-chrome puppeteer headless-browser google-chrome-headless

我正在通过Linux主机上的Node API使用puppeteer。我的用例是创建WebGL地图的不同大小的屏幕截图。

节点脚本通过命令行参数调用,它会生成一些不同大小的屏幕截图,然后退出。

我的问题是,操纵up的程序会使Web服务器的运行速度大大降低,因为它们位于同一主机上。

如何确保木偶进程和Chrome子进程以最低/空闲进程优先级启动?

这是我的Node脚本的骨架:

const puppeteer = require('puppeteer')

const SCREENSHOT_SIZES = ...

async function run() {
  const browser = await puppeteer.launch({})

  for (const size of SCREENSHOT_SIZES) {
    const page = await browser.newPage()

    await page.setViewport({
      width: size.w,
      height: size.h,
    })

    try {
      await page.goto(url, { waitUntil: 'networkidle0', timeout: 60 * 1000 })
    } catch (error) {
      console.error(error)
    }

    await page.screenshot({
      path: ... 
    })
  }

  await browser.close()
}

run()

1 个答案:

答案 0 :(得分:0)

您可以使用browser.process().pid获得衍生的浏览器进程的pid。然后,您可以使用os.setPriority()为浏览器的pid指定的进程设置调度优先级。

完整示例:

'use strict';

const os = require( 'os' );
const puppeteer = require( 'puppeteer' );

( async () =>
{
    const browser = await puppeteer.launch();

    os.setPriority( browser.process().pid, 15 );

    const page = await browser.newPage();

    await page.goto( 'https://www.example.com/' );

    await browser.close();
})();