微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在多处理环境中使用时对文件追加的限制

如何解决在多处理环境中使用时对文件追加的限制

我的进程创建了一个日志文件并使用 a文件末尾追加了一个新行,例如:

fopen("log.txt","a");

写入的顺序并不重要,但我需要确保 fopen 始终成功。我的问题是,上面的调用可以在 Windows、Linux 和 macOS 上同时从多个进程执行而没有任何竞争条件吗?

如果没有,确保我可以写入日志文件的最常见和最简单的方法是什么?有文件锁定,但也可能有文件锁定(又名 log.txt.lock)。谁能分享一些更详细的见解或资源?

解决方法

如果您不在进程之间使用任何同步,那么您很可能会遇到多个进程尝试写入文件的时间,而您可以获得的最佳结果是输入字符串的网格。

为了同步多个进程中的任何工作(multiprocessing 模块)。使用Lock。它会阻止多个进程同时做一些工作。

它看起来像这样:

import multiprocessing

# create lock in main process and "send" it to child processes.
lock = multiprocessing.Lock() 

# ...
# in child Process
with lock:
    do_some_work()

如果您需要更详细的示例,请随时询问。

您也可以在 official docs

中查看示例

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。