Я пытаюсь выяснить причину проблемы root в однопоточной программе Python, которая по сути выглядит так (сильно упрощено):
# Before running
os.remove(path)
# While running
if os.path.isfile(path):
with open(path) as fd:
...
Я, по сути, вижу errati c поведение, где isfile
(который использует stat
, сам использует GetFileAttributesExA
под капотом в Python 2.7, см. здесь ) может возвращать True
, если файл не существует, не удалось выполнить следующий вызов open
.
path
находясь на общем сетевом ресурсе SMB3, я подозреваю какое-то поведение кэширования. Возможно ли, что GetFileAttributesExA
возвращает устаревшую информацию?
Уменьшение кэширования клиента SMB со значения по умолчанию (10 с) до 0, похоже, устраняет проблему:
Set-SmbClientConfiguration -DirectoryCacheLifetime 0 -FileInfoCacheLifetime 0
(Примечание : Правильным исправлением здесь является try
открытие файла и перехват исключения, конечно, но я озадачен этой проблемой и хотел бы понять причину root.)