@Dasium в первом предложении имел в виду сохранить содержимое файла в список перед началом цикла, а потом его использовать N-ное количество раз. Но для большого количества файлов немного немного неудобный способ, так как придется создавать столько же списков. Почему-то сразу об этом не подумал...
Это давно можно делать. Не так просто, но за то гибко. Запускаем основные части скрипта через "функцию в несколько потоков", а когда эта функция отрабатывает, запускаем функцию, которая выполняет завершающие действия.