Как запустить процессы кукловода с низким приоритетом? - PullRequest
0 голосов
/ 10 сентября 2018

Я использую кукловод через Node API на хосте Linux. Мой пример использования - создание скриншотов разных размеров на карте WebGL.

Скрипт узла вызывается через аргументы командной строки, он генерирует несколько снимков экрана разных размеров и затем завершается.

Моя проблема в том, что процесс кукловода сильно замедляет работу веб-сервера, так как они находятся на одном хосте.

Как я могу убедиться, что процессы кукловода и дочерние процессы 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 голосов
/ 11 сентября 2018

Вы можете использовать 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();
})();
...