python日志记录支持多处理吗?

发布于 2021-01-29 17:09:14

有人告诉我不能在多处理中使用日志记录。您必须进行并发控制,以防多处理使日志混乱。

但是我做了一些测试,看来在多处理中使用日志记录没有问题

import time
import logging
from multiprocessing import Process, current_process, pool


# setup log
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                    datefmt='%a, %d %b %Y %H:%M:%S',
                    filename='/tmp/test.log',
                    filemode='w')


def func(the_time, logger):
    proc = current_process()
    while True:
        if time.time() >= the_time:
            logger.info('proc name %s id %s' % (proc.name, proc.pid))
            return



if __name__ == '__main__':

    the_time = time.time() + 5

    for x in xrange(1, 10):
        proc = Process(target=func, name=x, args=(the_time, logger))
        proc.start()

从代码中可以看到。

我故意让子进程在同一时刻(启动后5秒)写入日志,以增加冲突的机会。但是根本没有冲突。

所以我的问题是我们可以在多处理中使用日志记录吗?为什么这么多帖子说我们不能?

关注者
0
被浏览
202
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    正如Matino正确解释的那样:登录多处理设置并不安全,因为多个进程(对其他现有进程一无所知)正在写入同一文件,并且可能相互干扰。

    现在发生的是,每个进程都拥有一个打开的文件句柄,并对该文件执行“追加写入”。问题是在什么情况下追加写入是“原子的”(也就是说,不能被其他进程写入同一文件并混合其输出而中断)。这个问题适用于每种编程语言,最后它们将对内核进行syscall。

    归结为检查在/usr/include/linux/limits.h4096字节中定义的Linux上的管道缓冲区大小。对于其他操作系统,您可以在此处找到一个不错的列表。

    这意味着:如果您的日志行少于4‘096字节(如果在Linux上),那么如果直接连接磁盘(即在两者之间没有网络),则附加文件是安全的。但有关更多详细信息,请检查我的答案中的第一个链接。要对此进行测试,可以logger.info('procname %s id %s %s' % (proc.name, proc.pid, str(proc.name)*5000))使用不同的长度。以5000为例,我已经弄混了日志行/tmp/test.log

    在这个问题中,已经有很多解决方案,因此在这里我不会添加自己的解决方案。

    更新:烧瓶和多处理

    如果由uwsgi或nginx托管,则烧瓶等Web框架将在多个工作程序中运行。在这种情况下,多个进程可能会写入一个日志文件。会有问题吗?

    Flask中的错误处理是通过stdout /
    stderr完成的,然后由网络服务器(uwsgi,nginx等)处理,该服务器需要注意以正确的方式写入日志(例如,参见[this flask +
    nginx示例]))(http://flaviusim.com/blog/Deploying-Flask-with-nginx-uWSGI-and-
    Supervisor/
    ),可能还添加了流程信息,以便您可以将错误行与流程相关联。从flasks
    doc


    从Flask 0.11开始,默认情况下,错误会自动记录到Web服务器的日志中。但是警告不是。

    因此,如果您使用日志warn消息超出管道缓冲区大小,则仍然会出现日志文件混杂的问题。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看