在多进程环境中使用时文件追加的限制

问题描述 投票:0回答:2

我的进程创建一个日志文件,并使用

a
在文件末尾附加一个新行,例如:

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

写入的顺序并不重要,但我需要确保

fopen
始终成功。我的问题是,上面的调用可以在 Windows、Linux 和 macOS 上同时从多个进程执行而没有任何竞争条件吗?

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

multiprocessing fopen file-locking
2个回答
1
投票

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

为了同步多个进程中的任何工作(

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()

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

您也可以在官方文档中查看示例


0
投票

只要您的写入小于块大小,文件追加就是原子的。 (不确定这个词)。不确定这是否意味着 512 字节或 4096 字节左右。如果您的行比这更长,您可以为每条长消息放置一个对单独文件的引用(唯一的文件名)。

© www.soinside.com 2019 - 2024. All rights reserved.