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


Posted in Python onJuly 18, 2017

前言

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 
# ============================ 
 
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 = "\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模块的性能及多进程详解

Python的logging性能:

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

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

Python的logging多进程:

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

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

总结

以上就是这篇文章的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
让python同时兼容python2和python3的8个技巧分享
Jul 11 Python
Python数据类型详解(二)列表
May 08 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
Feb 08 Python
Redis使用watch完成秒杀抢购功能的代码
May 07 Python
使用tensorflow实现线性回归
Sep 08 Python
浅谈python多进程共享变量Value的使用tips
Jul 16 Python
python3 反射的四种基本方法解析
Aug 26 Python
Python2与Python3的区别详解
Feb 09 Python
解决pycharm同一目录下无法import其他文件
Feb 12 Python
python 解决Fatal error in launcher:错误问题
May 21 Python
解决pytorch下出现multi-target not supported at的一种可能原因
Feb 06 Python
python pyhs2 的安装操作
Apr 07 Python
浅谈python中的__init__、__new__和__call__方法
Jul 18 #Python
Pycharm编辑器技巧之自动导入模块详解
Jul 18 #Python
python对DICOM图像的读取方法详解
Jul 17 #Python
Python实现excel转sqlite的方法
Jul 17 #Python
PyChar学习教程之自定义文件与代码模板详解
Jul 17 #Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
Jul 17 #Python
Python下实现的RSA加密/解密及签名/验证功能示例
Jul 17 #Python
You might like
PHP添加MySQL数据记录代码
2008/06/07 PHP
thinkphp中连接oracle时封装方法无法用的解决办法
2013/06/17 PHP
腾讯QQ微博API接口获取微博内容
2013/10/30 PHP
PHP set_error_handler()函数使用详解(示例)
2013/11/12 PHP
php函数与传递参数实例分析
2014/11/15 PHP
JavaScript 判断判断某个对象是Object还是一个Array
2010/01/28 Javascript
JQuery设置文本框和密码框得到焦点时的样式
2013/08/30 Javascript
引入JS文件IE6报语法错误或缺少对象问题的解决方法
2014/01/09 Javascript
JavaScript中使用typeof运算符需要注意的几个坑
2014/11/08 Javascript
javascript实现控制的多级下拉菜单
2015/07/05 Javascript
JavaScript jQuery 中定义数组与操作及jquery数组操作
2015/12/18 Javascript
教你如何在Node.js中使用jQuery
2016/08/28 Javascript
jQuery常见的选择器及用法介绍
2016/12/20 Javascript
浅析vue数据绑定
2017/01/17 Javascript
JS实现DIV高度自适应窗口示例
2017/02/16 Javascript
Require.js的基本用法详解
2017/07/03 Javascript
清空元素html("") innerHTML="" 与 empty()的区别和应用(推荐)
2017/08/14 Javascript
javascript帧动画(实例讲解)
2017/09/02 Javascript
JavaScript定时器设置、使用与倒计时案例详解
2019/07/08 Javascript
python实现用户答题功能
2018/01/17 Python
Pandas聚合运算和分组运算的实现示例
2019/10/17 Python
浅谈Python类中的self到底是干啥的
2019/11/11 Python
Win下PyInstaller 安装和使用教程
2019/12/25 Python
使用anaconda安装pytorch的实现步骤
2020/09/03 Python
Omio荷兰:预订火车、巴士和机票
2018/11/04 全球购物
汉语专业应届生求职信
2013/10/01 职场文书
招商业务员岗位职责
2013/12/16 职场文书
教导处工作制度
2014/01/18 职场文书
2014年全国法制宣传日宣传活动方案
2014/11/02 职场文书
2015年见习期工作总结
2014/12/12 职场文书
护士辞职信怎么写
2015/02/27 职场文书
信访维稳承诺书
2015/05/04 职场文书
教师节表彰会主持词
2015/07/06 职场文书
《金色的草地》教学反思
2016/02/17 职场文书
Maven学习----Maven安装与环境变量配置教程
2021/06/29 Java/Android
浅谈JavaScript浅拷贝和深拷贝
2021/11/07 Javascript