zoukankan      html  css  js  c++  java
  • python中日志logging模块的性能及多进程详解

    python中日志logging模块的性能及多进程详解

    使用Python来写后台任务时,时常需要使用输出日志来记录程序运行的状态,并在发生错误时将错误的详细信息保存下来,以别调试和分析。Python的logging模块就是这种情况下的好帮手。本文就介绍了python中日志logging模块性能及多进程的相关资料,需要的朋友可以参考下。


    Java 中最通用的日志模块莫过于 Log4j 了,在 python 中,也自带了 logging 模块,该模块的用法其实和 Log4j 类似。日志是记录操作的一种好方式。但是日志,基本都是基于文件的,也就是要写到磁盘上的。这时候,磁盘将会成为一个性能瓶颈。对于普通的服务器硬盘(机械磁盘,非固态硬盘),Python日志的性能瓶颈是多少呢?今天我们就来测一下。下面话不多说,来一起看看详细的介绍:

    测试代码如下:

    #! /usr/bin/env python
    #coding=utf-8
      
    # ============================
    # Describe : 给平台提供的日志
    # D&P Author By:  常成功
    # Create Date:  2016/08/01
    # Modify Date:  2016/08/01
    # ============================
      
    importtime
    importos
    importlogging
      
      
    print"Start test ...."
    s_tm=time.time()
    test_time=10.0# 测试时间10秒
    e_tm=s_tm 10
    j=0
      
    pid=str(os.getpid())
    while1:
     now_time=time.time()
     j =1
     ifnow_time > e_tm:
      break
     # 生成文件夹
     lujing="d:\test_log"
     ifnotos.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
    printrps,"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已经到达瓶颈,所以多进程并不能提高日志性能。高性能日志,需要用缓存,或者分布式日志。

    总结

    以上就是这篇文章的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助.

  • 相关阅读:
    RESTful API 设计指南 (转)
    关于APP接口设计(转)
    申请付费苹果开发者账号 注意事项及流程 (转)
    Excel word “由于本机的限制_该操作已被取消_请与管理员联系”的已生效解决办法 (转 )
    iOS APP提交上架最新流程(转)
    Android 框架练成 教你打造高效的图片加载框架(转)
    intellij idea使用
    Android ImageView的scaleType属性与adjustViewBounds属性(转)
    android 教程实例系列
    打包时报错误调试
  • 原文地址:https://www.cnblogs.com/amengduo/p/9586406.html
Copyright © 2011-2022 走看看