问题描述
我的进程创建了一个日志文件并使用 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
中查看示例