Ответ 1
Я обнаружил, что использование del
также работает:
del a
Я загружаю файл:
a= np.load('myfile.npz')
а затем выполните действия с a
Через некоторое время я регенерирую myfile.npz
(на удаленной машине).
Когда я пытаюсь скопировать файл через (используя WinSCP) с удаленной машины, он не работает, сообщая:
System Error. Code: 32.
The process cannot access the file because it is being used by another process.
Я пробовал это:
>>> a.fid
<open file 'myfile.npz', mode 'rb' at 0x058A78B8>
>>> a.fid.close()
>>> a.fid
<closed file 'myfile.npz', mode 'rb' at 0x058A78B8>
Однако копия файла все равно не работает.
Если я закрою интерпретатор python, копия завершится успешно.
Что вызывает эта проблема? Мне нужно закрыть myfile.npz
(я думал, что это было обработано автоматически)? Если да, то как это сделать?
Я использую консоль python с IDE Spyder на Win7.
Я обнаружил, что использование del
также работает:
del a
Попробуйте использовать with
контекстный менеджер:
with np.load('myfile.npz') as a:
do_stuff(a)
do_morestuff() # a is closed now
Контекстные менеджеры автоматически заботятся о закрытии ресурса, как только вы закончите с ним.