Пример учебный. Пытаюсь понять.
1) Я получаю get запрос start1 и запускаю асинхронную функцию (в примере вызов скрипт питона, там просто таймер на 6 сек).
2) Не дожидаясь эти 6 сек отправляю еще раз этот запрос с другой вкладки браузера.
3) Ожидаю что запуск скрипта произойдет параллельно (ну или будет системная ошибка что файл занят), но в итоге второй get запрос выполняется только после того как выполнился первый get запрос.
Но при этом я могу послать одновременно запросы start1 и start2, которые параллельно будут выполнять эту асинхронную функцию не дожидаясь друг друга.
То есть из этого следует что если один клиент отправил GET запрос
с длительностью ответа 6 сек , другой клиент отправивший такой же GET будет ждать это время, даже если ядро и память сервера не загружены?
Я уже применял масштабирование с помощью cluster, но это это же для того что бы занять неиспользуемые ядра процессора.
А что делать что бы один клиент не ждал другого при выполнении для него асинхронной функции?
//express, cors и ssl
let fs = require('fs');
var express = require('express')
var app = express()
const cors = require('cors');
const https = require('https').createServer({
key: fs.readFileSync('./config/ssl/owen.pem'),
cert: fs.readFileSync('./config/ssl/owen.crt'),
}, app);
app.use(cors());
//для запуска скрипта питона в корором таймер на 6 сек
const util = require('util');
const exec = util.promisify(require('child_process').exec);
app.get('/start1', function (req, res) {
my_test()
.then((e) => {res.send('test1 завершил работу')})
})
app.get('/start2', function (req, res) {
my_test()
.then((e) => {res.send('test2 завершил работу')});
});
let i = 1;
async function my_test(){
let number = i;
i++;
console.log('старт скрипта ' + number);
const { stdout, stderr } = await exec('/usr/bin/python3 /home/omosencev/temp/test1.py >> test1.log 2>&1');
console.log('конец скрипта ' + number);
return
}
https.listen(3011, function () {
console.log('тестовый PORT', 3011)
})