Improve tempfile handling in checkpoint.py

Using more context managers, as well as dynamic temp dir creation, improve temp file handling, error handling, and logging
This commit is contained in:
Aareon Sullivan 2024-03-22 19:22:04 -05:00 committed by GitHub
parent 7050ed204b
commit defd415f9a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -46,26 +46,35 @@ def copy_to_shm(file: str):
yield file yield file
return return
tmp_dir = "/dev/shm/" with tempfile.NamedTemporaryFile(dir="/dev/shm", delete=False) as tmp_file:
fd, tmp_path = tempfile.mkstemp(dir=tmp_dir) tmp_path = tmp_file.name
try: try:
shutil.copyfile(file, tmp_path) shutil.copyfile(file, tmp_path)
yield tmp_path yield tmp_path
finally: finally:
try:
os.remove(tmp_path) os.remove(tmp_path)
os.close(fd) except OSError as e:
# Handle file deletion error gracefully
logger.error(f"Error deleting temporary file: {e}")
raise
@contextlib.contextmanager @contextlib.contextmanager
def copy_from_shm(file: str): def copy_from_shm(file: str):
tmp_dir = "/dev/shm/" tmp_dir = "/dev/shm/"
fd, tmp_path = tempfile.mkstemp(dir=tmp_dir) with tempfile.NamedTemporaryFile(dir=tmp_dir, delete=False) as tmp_file:
tmp_path = tmp_file.name
try: try:
yield tmp_path yield tmp_path
shutil.copyfile(tmp_path, file) shutil.copyfile(tmp_path, file)
finally: finally:
try:
os.remove(tmp_path) os.remove(tmp_path)
os.close(fd) except OSError as e:
# Handle file deletion error gracefully
logger.error(f"Error deleting temporary file: {e}")
raise
def fast_unpickle(path: str) -> Any: def fast_unpickle(path: str) -> Any: