При попытке сделать многопроцессорную работу с Arcpy я иногда сталкиваюсь с этой ошибкой:
FATAL ERROR (INFADI)
MISSING DIRECTORY
Я понятия не имею, что вызывает эту ошибку, и она приводит к сбою процесса python, делая невозможным получение обратной трассировки. Это происходит при записи окончательного растрового выхода из длинной звуковой модели.
Иногда это сопровождается ошибкой
Unable to write BND file for %TEMP%\ras####
Где% Temp - анализируемая корректность, а #### - какое-то случайное четырехзначное число. Это необычно, потому что у каждого процесса есть свое собственное рабочее пространство, в которое должно быть записано большинство файлов.
Проблема не во входных данных ... Я могу перезапустить программу на неудачных входах, и она будет работать правильно.
arcpy
arcgis-10.0
parallel-processing
blord-Castillo
источник
источник
Ответы:
Вот несколько вещей для проверки:
Вы используете курсоры? Вы их выпускаете? Вы пытаетесь повторно использовать какие-либо объекты в разных процессах? Вы используете одно и то же временное местоположение? Вы занимаетесь обработкой памяти?
В общем, arcpy - это просто оболочка вокруг com-объектов, и любой тип многопроцессорной обработки будет сложным.
источник
Я обнаружил, что эта проблема возникает, когда arcpy.env.workspace и arcpy.env.scratchWorkspace одинаковы для двух разных процессов. Arc записывает почти все промежуточные растры в рабочую область (или рабочую область с нуля) в формате ESRI GRID. Вы не можете записать два растра ESRI GRID в один и тот же каталог одновременно из-за псевдо-базы данных формата (в информационной папке хранятся уникальные ключи для каждого растра).
Я избежал этой ошибки, назначив уникальное рабочее пространство и scratchWorkspace для каждого процесса, используя временную папку tempfile.mkdtemp.
источник
Я также столкнулся с этим и пока не нашел исправления. Моя работа состоит в том, чтобы 1) убедиться, что многопроцессорная задача достаточно надежна, чтобы проверить, выполнены ли задачи, или нет, а затем создать новый список заданий. 2) запланируйте запуск двух скриптов каждые 10-15 минут. Один сценарий содержит команду для уничтожения выбранных запущенных процессов Python, а второй запускает требуемый многопроцессорный сценарий. По сути, это обновляет многопроцессорный пул. Сценарий уничтожения выглядит примерно так:
При каждом запуске нужного мне скрипта он записывает свой PID в CSV.
источник
Я должен признать, что на данный момент я просто многопоточный подражатель, но блог на https://pythongisandstuff.wordpress.com/2013/07/31/using-arcpy-with-multiprocessing-%E2%80%93-part -3 / предполагает, что интеграция
arcpy.Exists()
функции является ключом к тому, чтобы это произошло.источник
Я обнаружил, что получаю ошибку INFADI при попытке сохранить несколько потоков / ядер и изменить растры в одной папке. Назначение подпапки для каждой задачи для результатов, кажется, решает проблему. Я полагаю, что проблема была связана с несколькими операциями чтения / записи в периферийные файлы, связанные с растром (например, папка «info»). Теперь я также применяю следующие меры предосторожности:
источник