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实现获取网站PR及百度权重
Jan 21 Python
Python常用的日期时间处理方法示例
Feb 08 Python
Linux中安装Python的交互式解释器IPython的教程
Jun 13 Python
Python中扩展包的安装方法详解
Jun 14 Python
Python如何爬取实时变化的WebSocket数据的方法
Mar 09 Python
python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算
Jul 18 Python
python 监测内存和cpu的使用率实例
Nov 28 Python
pandas的相关系数与协方差实例
Dec 27 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
Jan 09 Python
Django model.py表单设置默认值允许为空的操作
May 19 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
May 24 Python
Python3爬虫里关于代理的设置总结
Jul 30 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
一个简洁的多级别论坛
2006/10/09 PHP
php修改指定文件后缀的方法
2014/09/11 PHP
PHP封装的Twitter访问类实例
2015/07/18 PHP
简单的php购物车代码
2020/06/05 PHP
JavaScript 对象、函数和继承
2009/07/07 Javascript
javascript获取作用在元素上面的样式属性代码
2012/09/20 Javascript
捕获和分析JavaScript Error的方法
2014/03/25 Javascript
简单纯js实现点击切换TAB标签实例
2015/08/23 Javascript
JS hashMap实例详解
2016/05/26 Javascript
PassWord输入框代码分享
2016/06/07 Javascript
微信小程序 swiper组件详解及实例代码
2016/10/25 Javascript
prototype与__proto__区别详细介绍
2017/01/09 Javascript
解决ie img标签内存泄漏的问题
2017/10/13 Javascript
JS实现div模块的截图并下载功能
2017/10/17 Javascript
Python中使用items()方法返回字典元素对的教程
2015/05/21 Python
python根据京东商品url获取产品价格
2015/08/09 Python
python字符串连接方法分析
2016/04/12 Python
TensorFLow用Saver保存和恢复变量
2018/03/10 Python
简单了解Python3 bytes和str类型的区别和联系
2019/12/19 Python
django有哪些好处和优点
2020/09/01 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
Html5实现移动端、PC端 刮刮卡效果
2016/06/30 HTML / CSS
乌克兰网上服装店:Bolf.ua
2018/10/30 全球购物
西班牙在线药店:DosFarma
2020/03/28 全球购物
将一个数的从第5位开始的7个数取出,其余位置0
2016/05/26 面试题
什么是聚集索引和非聚集索引
2012/01/17 面试题
竞选部长演讲稿
2014/04/26 职场文书
百日安全活动总结
2014/05/04 职场文书
领导班子个人对照检查剖析材料
2014/09/29 职场文书
2014年作风建设剖析材料
2014/10/23 职场文书
2014年超市工作总结
2014/11/19 职场文书
党的群众路线教育实践活动先进个人材料
2014/12/24 职场文书
入党积极分子培养人意见
2015/06/02 职场文书
房产遗嘱范本
2015/08/06 职场文书
基于Python的EasyGUI学习实践
2021/05/07 Python
MySQL中order by的使用详情
2021/11/17 MySQL