У меня есть длительный процесс, который записывает много всего в файл. Результатом должно быть все или ничего, поэтому я пишу во временный файл и переименовываю его в настоящее имя в конце. В настоящее время мой код выглядит следующим образом:
filename = 'whatever'
tmpname = 'whatever' + str(time.time())
with open(tmpname, 'wb') as fp:
fp.write(stuff)
fp.write(more stuff)
if os.path.exists(filename):
os.unlink(filename)
os.rename(tmpname, filename)
Я не доволен этим по нескольким причинам:
- он не очищается должным образом, если возникает исключение.
- он игнорирует проблемы concurrency
- он не может использоваться повторно (мне это нужно в разных местах моей программы)
Любые предложения по улучшению кода? Есть ли библиотека, которая может мне помочь?