diff --git a/modules/shared.py b/modules/shared.py index f8c1e5fed..cd70bf54d 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -214,7 +214,7 @@ def readfile(filename, silent=False, lock=False): return data -def writefile(data, filename, mode='w', silent=False): +def writefile(data, filename, mode='w', silent=False, atomic=False): lock = None locked = False import tempfile @@ -241,13 +241,15 @@ def writefile(data, filename, mode='w', silent=False): raise ValueError('not a valid object') lock = fasteners.InterProcessReaderWriterLock(f"{filename}.lock", logger=log) locked = lock.acquire_write_lock(blocking=True, timeout=3) - with tempfile.NamedTemporaryFile(mode=mode, encoding="utf8", delete=False, dir=os.path.dirname(filename)) as f: - f.write(output) - f.flush() - os.fsync(f.fileno()) - os.replace(f.name, filename) - # with open(filename, mode=mode, encoding="utf8") as file: - # file.write(output) + if atomic: + with tempfile.NamedTemporaryFile(mode=mode, encoding="utf8", delete=False, dir=os.path.dirname(filename)) as f: + f.write(output) + f.flush() + os.fsync(f.fileno()) + os.replace(f.name, filename) + else: + with open(filename, mode=mode, encoding="utf8") as file: + file.write(output) t1 = time.time() if not silent: log.debug(f'Save: file="{filename}" json={len(data)} bytes={len(output)} time={t1-t0:.3f}')