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

问题描述

我的进程创建了一个日志文件并使用 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

中查看示例

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...