Показать сообщение отдельно
  #1 (permalink)  
Старый 21.01.2022, 15:23
Интересующийся
Отправить личное сообщение для Oleg_Lugaro Посмотреть профиль Найти все сообщения от Oleg_Lugaro
 
Регистрация: 30.10.2020
Сообщений: 10

GET запросы становятся в очередь.
Пример учебный. Пытаюсь понять.

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)
})

Последний раз редактировалось Oleg_Lugaro, 24.01.2022 в 09:57.
Ответить с цитированием