2013-05-03 2 views
0

Сегодня я столкнулся с проблемой, когда гора устарела, и это привело к тому, что мое приложение python зависало бесконечно.Python смонтирован висячей с устаревшим креплением. Предложения?

Что случилось, гора устарела, а затем я вызвал os.path.exists(path) на этом пути. Звонок зависает бесконечно.

Мне действительно нужно предотвратить это. Моя единственная идея - поместить вызов os.path.exists в фоновый поток и резко убить поток (очевидно, не рекомендуется), если он все еще жив после таймаута в секундах. В идеале я бы избегал этого, обратившись к телефону, чтобы проверить, является ли гора первым.

Любые идеи? FYI, все вызовы, пытающиеся получить доступ к этому пути, зависают, включая os.path.ismount(path). Хотя это редкое событие, я не могу отключить всю систему для пользователей: /.

+0

Я видел такое поведение с некоторыми пользовательскими файловыми системами (предохранители и т.д.). Это больше похоже на проблему реализации файловой системы, которая перестает давать ответы, когда запрашивает ядро. Я бы переклассифицировал вопрос как Linux, Kernel (если применимо). –

+0

Это в Ubuntu, монтирую удаленный накопитель centOS (я полагаю, nfs). Нет странных файловых систем. В настоящее время мы пытаемся установить «мягкий» вариант установки nfs, но не приходим к монтированию, но все же проверяем. – user1777820

ответ

0

Вы можете использовать модуль подпроцесса питона и оболочки команды «тайм-аут», чтобы обнаружить висящие установки:

call = subprocess.Popen(["timeout 10 ls /your_mount_dir/ &> /dev/null; echo $?"], stdout=subprocess.PIPE, shell=True) 
output = call.communicate() 
result = output[0].strip() 
if result != '0': 
    # Mount is hung.