Python 多个用户同时追加到同一个文件

新手上路,请多包涵

我正在开发一个可以通过网络访问的 python 脚本,因此会有多个用户同时尝试附加到同一个文件。我担心这可能会导致竞争条件,如果多个用户同时写入同一个文件,它可能会损坏文件。

例如:

 #!/usr/bin/env python

g = open("/somepath/somefile.txt", "a")
new_entry = "foobar"
g.write(new_entry)
g.close

我是否必须为此使用锁定文件,因为此操作看起来有风险。

原文由 Ray Y 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 574
2 个回答

您可以使用 文件锁定

 import fcntl
new_entry = "foobar"
with open("/somepath/somefile.txt", "a") as g:
    fcntl.flock(g, fcntl.LOCK_EX)
    g.write(new_entry)
    fcntl.flock(g, fcntl.LOCK_UN)

请注意,在某些系统上,如果您只写小缓冲区,则 不需要 锁定,因为 这些系统上的追加是原子的

原文由 phihag 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您在 Linux 上执行此操作,并且缓存大小小于 4KB,则写操作是原子的,您应该没问题。

更多内容请阅读: Is file append atomic in UNIX?

原文由 user1767754 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题