Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 写入并发日志文件_Python_Logging_Apache2_Wsgi - Fatal编程技术网

Python 写入并发日志文件

Python 写入并发日志文件,python,logging,apache2,wsgi,Python,Logging,Apache2,Wsgi,我在apache2上有一个WSGI应用程序,它以最简单的方式写入日志文件: def log (msg): with open (LOGFILE, 'a') as f: f.write (msg) 在我的沙盒环境中,它工作得很好,不过我有点担心并发性。如果apache2运行各种线程,我是否必须担心并发问题?我的日志文件可能会被打乱吗?如果另一个线程已经在记录日志,那么对log(msg)的调用可能会失败吗?如果是这样的话,我该如何预防呢 编辑: 为了进行测试,我从两个shell同时运行两个

我在apache2上有一个WSGI应用程序,它以最简单的方式写入日志文件:

def log (msg):
    with open (LOGFILE, 'a') as f: f.write (msg)
在我的沙盒环境中,它工作得很好,不过我有点担心并发性。如果apache2运行各种线程,我是否必须担心并发问题?我的日志文件可能会被打乱吗?如果另一个线程已经在记录日志,那么对
log(msg)
的调用可能会失败吗?如果是这样的话,我该如何预防呢

编辑: 为了进行测试,我从两个shell同时运行两个脚本:

#! /usr/bin/python3.2

def log ():
    with open ('log', 'a') as f:
        f.write ('message from thread A\n')

while (True): log ()


日志文件看起来不错,没有发生错误。我是幸运还是安全地从两个不同的线程写入同一个文件。文件系统是ext4。

您可以使用python

您可以使用python

在linux操作系统中确保附加模式下的写入文件是原子的,因此不会发生错误

在linux操作系统中确保附加模式下的写入文件是原子的,因此不会发生错误

为什么不使用python日志记录模块?伟大的特别是这一行:“日志模块旨在实现线程安全,无需客户端执行任何特殊工作。它通过使用线程锁来实现这一点;有一个锁用于序列化对模块共享数据的访问,每个处理程序还创建一个锁来序列化对其底层I/O的访问。”将其作为答案发布,以便我可以接受。为什么不使用python日志模块?伟大的特别是这一行:“日志模块旨在实现线程安全,无需客户端执行任何特殊工作。它通过使用线程锁来实现这一点;有一个锁用于序列化对模块共享数据的访问,每个处理程序还创建一个锁来序列化对其底层I/O的访问。”把它作为答案贴出来,这样我就可以接受了。
#! /usr/bin/python3.2

def log ():
    with open ('log', 'a') as f:
        f.write ('message from thread B\n')

while (True): log ()