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中列表和元组的使用方法和区别详解
Dec 30 Python
详解python中字典的循环遍历的两种方式
Feb 07 Python
Python中装饰器兼容加括号和不加括号的写法详解
Jul 05 Python
如何优雅地处理Django中的favicon.ico图标详解
Jul 05 Python
python查找指定文件夹下所有文件并按修改时间倒序排列的方法
Oct 21 Python
python groupby 函数 as_index详解
Dec 16 Python
TensorFlow梯度求解tf.gradients实例
Feb 04 Python
python获得命令行输入的参数的两种方式
Nov 02 Python
用Python自动清理电脑内重复文件,只要10行代码(自动脚本)
Jan 09 Python
python基础入门之字典和集合
Jun 13 Python
python用海龟绘图写贪吃蛇游戏
Jun 18 Python
Python基本知识点总结
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源代码加密?PHP二进制加密与解密的解决办法
2013/04/22 PHP
php冒泡排序与快速排序实例详解
2015/12/07 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
2018/05/11 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
2020/04/13 PHP
jqPlot 基于jquery的画图插件
2011/04/26 Javascript
变量声明时命名与变量作为对象属性时命名的区别解析
2013/12/06 Javascript
jQuery中DOM操作实例分析
2015/01/23 Javascript
浅谈js的url解析函数封装
2016/06/28 Javascript
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
详解nodejs 文本操作模块-fs模块(三)
2016/12/22 NodeJs
JS复制对应id的内容到粘贴板(Ctrl+C效果)
2017/01/23 Javascript
微信公众号菜单配置微信小程序实例详解
2017/03/31 Javascript
浅谈AngularJS中使用$resource(已更新)
2017/09/14 Javascript
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
vue3.0封装轮播图组件的步骤
2021/03/04 Vue.js
[57:09]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第一场 1月26日
2021/03/11 DOTA
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
2015/04/25 Python
Python xlwt设置excel单元格字体及格式
2020/04/18 Python
Python使用numpy实现BP神经网络
2018/03/10 Python
python变量命名的7条建议
2019/07/04 Python
python模式 工厂模式原理及实例详解
2020/02/11 Python
Python创建空列表的字典2种方法详解
2020/02/13 Python
Python的历史与优缺点整理
2020/05/26 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
2021/02/05 Python
微信端html5页面调用分享接口示例
2018/03/14 HTML / CSS
Topman美国官网:英国著名的国际平价时尚男装品牌
2017/12/22 全球购物
皮姆斯勒语言学习:Pimsleur Language Programs
2018/06/30 全球购物
为您的家、后院、车库等在线购物:Spreetail
2019/06/17 全球购物
实习教师个人的自我评价
2013/11/08 职场文书
文明村镇申报材料
2014/05/06 职场文书
建筑节能汇报材料
2014/08/22 职场文书
2015年公司行政后勤工作总结
2015/05/20 职场文书
保护动物的宣传语
2015/07/13 职场文书
导游词之镜泊湖
2019/12/09 职场文书
利用python做表格数据处理
2021/04/13 Python
利用Python多线程实现图片下载器
2022/03/25 Python