我的进程创建一个日志文件,并使用
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()
如果您需要更详细的示例,请随时询问。
您也可以在官方文档中查看示例
只要您的写入小于块大小,文件追加就是原子的。 (不确定这个词)。不确定这是否意味着 512 字节或 4096 字节左右。如果您的行比这更长,您可以为每条长消息放置一个对单独文件的引用(唯一的文件名)。