• python的日志logging模块性能以及多进程


    写在前面:

        日志是记录操作的一种好方式。但是日志,基本都是基于文件的,也就是要写到磁盘上的。这时候,磁盘将会成为一个性能瓶颈。对于普通的服务器硬盘(机械磁盘,非固态硬盘),python日志的性能瓶颈是多少呢?今天我们就来测一下。

        测试代码如下:

    #! /usr/bin/env python
    #coding=utf-8

    # ============================
    # Describe : 给平台提供的日志
    # D&P Author By: 常成功
    # Create Date: 2016/08/01
    # Modify Date: 2016/08/01
    # ============================

    import time
    import os
    import logging


    print "Start test ...."
    s_tm = time.time()
    test_time = 10.0 # 测试时间10秒
    e_tm = s_tm + 10
    j = 0

    pid = str(os.getpid())
    while 1:
    now_time = time.time()
    j += 1
    if now_time > e_tm:
    break
    # 生成文件夹
    lujing = "d:\test_log"
    if not os.path.exists(lujing):
    os.mkdir(lujing)

    fm2 = '%Y%m%d'
    YMD = time.strftime(fm2, time.localtime(now_time))

    filename = 'recharge_' + YMD + '.log'
    log_file = os.path.join(lujing, filename)
    t = " "
    log_msg = str(j) +t+ str(now_time) +t+ pid

    the_logger = logging.getLogger('recharge_log')
    f_handler = logging.FileHandler(log_file)
    the_logger.addHandler(f_handler)
    the_logger.setLevel(logging.INFO)
    # To pass exception information, use the keyword argument exc_info with a true value
    the_logger.info(log_msg, exc_info=False)
    the_logger.removeHandler(f_handler)

    rps = j/test_time
    print rps, "rows per second"

    结果为:

    Start test ....
    2973.0 rows per second

    Python的logging性能:
    7200转的机械磁盘,测了几次,每秒的能写入日志的行数(每行就是一条日志),数量基本在 2800-3000 之间。此时,磁盘IO基本已经跑满。(在3.3Ghz的CPU上,CPU占用大约40%)。

    Python的logging多进程:
    Python 的 logging模块,是线程安全的。但对于多进程的程序来说,怎么去写日志文件呢?我的解决办法是,每个进程的PID,写一个单独的日志文件。再用算法把所有进程的日志合并起来,生成新的日志。

    提示:由于磁盘IO已经到达瓶颈,所以多进程并不能提高日志性能。高性能日志,需要用缓存,或者分布式日志。


    ---------------------
    作者:常城
    来源:CSDN
    原文:https://blog.csdn.net/chenggong2dm/article/details/52094410
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    QPS计算
    Burp学院-信息泄露
    Burp学院-OS命令注入
    Burp学院-SQL注入
    时间格式转换 日期转换
    K8s 1.20x版本nfs动态存储报错 persistentvolume-controller waiting for a volume to be created, either by external provisioner "qgg-nfs-storage" or manually created by system administrator
    K8Snode的自定义状态信息
    kubernetes之node资源紧缺时pod驱逐机制
    K8Snode最大pod数量
    阿里云域名白名单访问限制
  • 原文地址:https://www.cnblogs.com/ExMan/p/10144630.html
Copyright © 2020-2023  润新知