7

Are file.write operations atomic in Python or C?

Example

Consider the following two threads

Thread 1

with open('foo', 'a') as f:
    f.write('123456')

Thread 2

with open('foo', 'a') as f:
    f.write('abcdef')

Are we guaranteed not to get intermingled text like the following?

1a2b3c4d5e6f
or 
123abc456def

but instead get one of the two possible correct results

123456abcdef
abcdef123456

Note that there is a single call to write in each thread, obviously atomic multiple writes would require some sort of lock. I'm also aware of file-based locks. The ideal answer to this question is yes/no along with evidence/documentation.

MRocklin
  • 55,641
  • 23
  • 163
  • 235

1 Answers1

3

It looks like the underlying OS write() call might not even be atomic:

Atomicity of `write(2)` to a local filesystem

Community
  • 1
  • 1
Stan Seibert
  • 206
  • 1
  • 1
  • Yes, but according to your link, it looks like appending is likely atomic. (And append is what is used in the question.) – Pro Q Oct 02 '21 at 10:25