Saat mencoba melakukan multiprocessing dengan arcpy, saya sesekali mengalami kesalahan ini:
FATAL ERROR (INFADI)
MISSING DIRECTORY
Saya tidak tahu apa yang memicu kesalahan ini, dan itu crash proses python, sehingga tidak mungkin untuk mendapatkan traceback di atasnya. Ini terjadi saat menulis output raster akhir dari model suara yang panjang.
Terkadang disertai dengan kesalahan
Unable to write BND file for %TEMP%\ras####
Di mana% Temp diurai koreksi dan #### adalah beberapa angka acak 4 digit. Ini tidak biasa karena setiap proses memiliki ruang kerja sendiri, di mana sebagian besar file harus ditulis.
Masalahnya bukan data input ... Saya bisa menjalankan kembali program pada input yang gagal dan itu akan berjalan dengan benar.
arcpy
arcgis-10.0
parallel-processing
tuan-castillo
sumber
sumber
Jawaban:
Berikut beberapa hal yang perlu diperiksa:
Apakah Anda menggunakan kursor? Apakah Anda melepaskannya? Apakah Anda mencoba menggunakan kembali objek apa pun dalam proses yang berbeda? Apakah Anda berbagi lokasi temp yang sama? Apakah Anda melakukan pemrosesan memori?
Secara umum, arcpy hanyalah pembungkus di sekitar objek com dan semua jenis multiprocessing akan rumit.
sumber
Saya menemukan masalah ini muncul ketika arcpy.env.workspace dan arcpy.env.scratchWorkspace adalah sama untuk dua proses yang berbeda. Arc menulis hampir semua raster menengah ke ruang kerja (atau ruang kerja awal) dalam format ESRI GRID. Anda tidak dapat menulis dua raster ESRI GRID ke direktori yang sama pada saat yang sama karena struktur pseudo-database format (folder info menyimpan kunci unik untuk setiap raster).
Saya telah menghindari kesalahan ini dengan menetapkan ruang kerja unik dan scratchWorkspace untuk setiap proses menggunakan folder tempfile.mkdtemp sementara.
sumber
Saya juga mengalami ini dan belum menemukan perbaikan suara. Pekerjaan saya adalah 1) untuk memastikan bahwa tugas multiprosesing cukup kuat untuk memeriksa apakah tugas selesai atau tidak, kemudian membuat daftar pekerjaan baru. 2) jadwalkan dua skrip untuk diluncurkan setiap 10-15 menit. Satu skrip berisi perintah untuk mematikan proses python yang sedang berjalan dan yang kedua meluncurkan kembali skrip multiprosesing yang diinginkan. Pada dasarnya, ini menyegarkan kumpulan multi-pemrosesan. Skrip kill adalah sesuatu seperti ini:
Setiap peluncuran skrip yang diinginkan saya minta ia menulis PID-nya ke csv.
sumber
Saya harus mengakui bahwa saya pada titik ini, hanya sebuah wannabee multithreading, tetapi sebuah blog di https://pythongisandstuff.wordpress.com/2013/07/31/using-arcpy-with-multiprocessing-%E2%8080%93-part -3 / menyarankan bahwa mengintegrasikan
arcpy.Exists()
fungsi adalah kunci untuk mewujudkannya.sumber
Saya menemukan bahwa saya mendapatkan kesalahan INFADI ketika mencoba memiliki beberapa utas / inti simpan dan modifikasi raster dalam satu folder. Menugaskan subfolder untuk setiap tugas untuk keluaran tampaknya menyelesaikan masalah. Saya percaya bahwa masalahnya ada pada beberapa baca / tulis ke file perangkat yang terkait dengan raster (misalnya folder "info"). Saya sekarang juga menerapkan tindakan pencegahan berikut:
sumber