Исходя из вашего вопроса, я предполагаю, что вы не имеете в виду запись параллельно (что, вероятно, не ускорит процесс из-за того, что операция, вероятно, связана с IO).
ВашРешение имеет одну маленькую проблему - оно не гарантирует, что f
будет закрыто, если write
выдает исключение.
Вот три альтернативных способа сделать это, чтобы убедиться, что файл закрыт даже при ошибке:
for fname in ["file1.txt", "file2.txt"]
open(fname, "w") do f
write(f, "content")
end
end
for fname in ["file1.txt", "file2.txt"]
open(f -> write(f, "content"), fname, "w")
end
foreach(fn -> open(f -> write(f, "content"), fn, "w"),
["file1.txt", "file2.txt"])
Они дают одинаковый результат, поэтому выбор является делом вкуса (вы можете получить еще несколько вариантов аналогичных реализаций).
Все методы основаны на следующем методе open
function:
open(f::Function, args...; kwargs....)
Apply the function f to the result of open(args...; kwargs...)
and close the resulting file descriptor upon completion.
Заметьте, что обработка все равно будет прекращена, если где-то фактически возникнет исключение (гарантируется, что дескриптор файла будет закрыт).Чтобы убедиться, что каждая операция записи действительно выполняется, вы можете сделать что-то вроде:
for fname in ["file1.txt", "file2.txt"]
try
open(fname, "w") do f
write(f, "content")
end
catch ex
# here decide what should happen on error
# you might want to investigate the value of ex here
end
end
См. https://docs.julialang.org/en/latest/manual/control-flow/#The-try/catch-statement-1 для документации try/catch
.