Я пытаюсь записать более 100 PNG-файлов через нод-холст в цикле.Генерируется только 40 файлов, и затем процесс завершается.
Я попытался создать поток png с помощью createPNGStream () и передать результаты в поток записи, созданный fs.createWriteStream ().
Запись функции:
function writeFile(row, col) {
// canvas code ...
const stream = canvas.createPNGStream();
let path = __dirname + '/imgs/heatmapRow' + row + "Col" + col + '.png';
const out = fs.createWriteStream(path);
stream.pipe(out);
out.on('finish', () => console.log('The PNG file was created.'))
}
Вызов функции:
function generateImages(){
var numRows = 20;
var numCols = 5;
for(let row = 0; row < numRows; ++row) {
for (let col = 0; col < numCols; ++col) {
writeFile(row, col);
}
}
}
Цикл запускается и завершается, и в конце я получаю несколько следующих строк:один раз:
Файл PNG создан.Файл PNG создан.Файл PNG создан.Файл PNG создан.
Я думаю, что в каждом цикле создается writeStream и он асинхронный.Процесс заканчивается, потому что у меня может быть открыто только очень много потоков.
Как я могу записать все свои файлы и сделать это асинхронно, чтобы ускорить время процесса?(Я предпочитаю не записывать файлы синхронно) Нужно ли добавлять каждый writeFile в очередь?Как определить ограничение количества открытых потоков и как ими управлять?