Я зацикливаю большие ~ 10k файлов, используя go -exiftool. Я использую один экземпляр go -exiftool для получения информации обо всех необходимых файлах. Этот код вызывается 10k раз в l oop, где файл всегда разный.
fileInfos := et.ExtractMetadata(file)
После ~ 7k циклов программа зависает. Я отладил go -exiftool и обнаружил, что он зависает в https://github.com/barasher/go-exiftool/blob/master/exiftool.go#L121 в строке:
fmt.Fprintln(io.WriteCloser, "-execute")
, если я правильно понял, io.WriteCloser
имеет экземпляр exec.Command(binary, initArgs...).StdinPipe()
итак, вопросы:
- Есть ли у exe c. Команда имеет лимит выполнения?
- Если 1) - нет, в чем может быть причина еще ?
- Это зависит от размеров файлов? Я попробовал другую папку, и она работала с файлами 35k, а затем зависла. Как это проверить?
ОБНОВЛЕНИЕ: Я пытался запустить тот же файл в циклах по 10 тыс. Работает отлично. Похоже, не хватает памяти, не так ли? Не вижу проблем в графике системной памяти. Или stdin переполнен. Не знаю, как это проверить.