Использование child_process.exe c в функциях Google очень медленное и случайное - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь выполнить произвольный код, предоставленный пользователем, достаточно безопасным и контролируемым образом. Я делал это, используя child_process.exe c в облачной функции Google.

Однако я обнаружил, что время выполнения может довольно сильно различаться.

Запуск одного console.log внутри облачной функции напрямую, по сравнению с child_process.exe c внутри облачной функции, приводит к накладным расходам в 500-4000 мс времени выполнения.

Кажется немного сумасшедшим, что оба:

  1. может варьироваться так широко.
  2. Может потребоваться более 4 секунд для запуска в отдельном потоке.

Полагаю, это потому, что они, по сути, выделяют только один поток для функции Cloud, и мой процесс должен ждать, пока другой на этой машине не освободится.

Есть ли что-то, что я могу сделать даже для этого out?

Главное, что меня беспокоит, это неконтролируемые выходы из функции. Поэтому другой альтернативой является попытка использовать process.on('uncaughtException') для отлова и ответа, прежде чем делать process.exit(0) или что-то еще. Но это становится странным, нечистым и трудным для тестирования довольно быстро.

РЕДАКТИРОВАТЬ: Подробнее: Мне также кажется, что я вызываю функцию только один раз каждые 5 минут, так что это может быть холодный старт до некоторой степени. Но даже если я называю это непрерывно, накладные расходы меняются часто от 500 мс до 2000 мс.

...