Я хочу контролировать, где хранятся временные файлы, созданные растровыми функциями. Причина в том, что я хочу иметь возможность удалять временные файлы, относящиеся к процессу, без удаления тех, которые используются другими процессами, выполняющимися параллельно. Это предложил Люк Маколей, здесь.
Идея состоит в том, что каждый процесс включает команды, которые: устанавливают зависящий от процесса tmpdir
, затем запускают некоторую растровую функцию, сохраняют свой специфичный для процесса вывод где-то еще, кроме tmpDir()
, и, наконец, удаляют зависящий от процесса tmpDir()
.
Но некоторые растровые операции сохраняют свои временные файлы во временном каталоге "по умолчанию" (выглядит как C:\Users\...\Temp\RtmpaevgEe
). Следовательно, эти временные файлы не могут быть удалены в конце каждого процесса и в конечном итоге рискуют заполнить жесткий диск. Это происходит независимо от того, выполняется ли это для одного процесса, в итеративном цикле процессов или в параллельной настройке.
Мой код для установки временного каталога для конкретного процесса:
# Define which process we are in:
processname <- file.path(<raster_to_input_to_this_process.tif>)
# Create path to process-specific temp directory
process_tmp_dir <- file.path(paste0(processname,"_Tmp"))
# Create process-specific temp directory
dir.create(process_tmp_dir, showWarnings = FALSE)
# set temp directory
rasterOptions(tmpdir=process_tmp_dir)
rasterOptions()
или tmpDir()
действительно возвращают process_tmp_dir
, а не временный каталог по умолчанию, который он возвращал до команды rasterOptions(tmpdir=process_tmp_dir)
.
Затем, если я запускаю операцию mask
(растровый, пространственный метод), временные файлы создаются в process_tmp_dir
, как и ожидалось.
Но если я запустил calc
, overlay
или aggregate
, мой process_tmp_dir
останется пустым, а временные файлы появятся в каталоге temp по умолчанию. Однако после этого rasterOptions()
или tmpDir()
вернут process_tmp_dir
.
В каждом случае я указывал аргумент filename
и
canProcessInMemory(processname, verbose = T)
memory stats in GB
mem available: 9.66
60% : 5.8
mem needed : 28.07
max allowed : 4.66 (if available)
[1] FALSE
Интересно, почему эти функции не «соответствуют» новой настройке tmpdir, в то время как mask
соответствует. (Также обратите внимание, что mask
генерирует .grd, гораздо более тяжелые, временные файлы, чем те, .tif, сгенерированные calc
и т. Д.) Я был бы очень признателен за любые предложения, почему это так, и что можно сделать, чтобы убедиться, что временные файлы любой растровой функции генерируются в указанном tmpDir()
.
Я могу сделать данные доступными и указать точные операции с растром, если вы считаете, что это необходимо для лучшего понимания происходящего.