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基础教程之数字处理(math)模块详解
Mar 25 Python
Python中的引用和拷贝浅析
Nov 22 Python
在Python的Django框架上部署ORM库的教程
Apr 20 Python
用Python实现服务器中只重载被修改的进程的方法
Apr 30 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
Dec 04 Python
python字典改变value值方法总结
Jun 21 Python
python的debug实用工具 pdb详解
Jul 12 Python
django-crontab实现服务端的定时任务的示例代码
Feb 17 Python
PyTorch中Tensor的数据统计示例
Feb 17 Python
详解django使用include无法跳转的解决方法
Mar 19 Python
python使用OpenCV模块实现图像的融合示例代码
Apr 10 Python
利用Python脚本写端口扫描器socket,python-nmap
Jul 23 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
业余方法DIY电子管FM收音机
2021/03/02 无线电
PHP 面向对象 PHP5 中的常量
2010/05/05 PHP
学习php设计模式 php实现建造者模式
2015/12/07 PHP
thinkphp5框架API token身份验证功能示例
2019/05/21 PHP
Laravel框架实现调用百度翻译API功能示例
2019/05/30 PHP
PHP获取类私有属性的3种方法
2020/09/10 PHP
一个报数游戏js版(约瑟夫环问题)
2010/08/05 Javascript
javascript定义函数的方法
2010/12/06 Javascript
js 幻灯片的实现
2011/12/06 Javascript
用最通俗易懂的代码帮助新手理解javascript闭包 推荐
2012/03/01 Javascript
JavaScript中的数值范围介绍
2014/12/29 Javascript
jquery简单实现网页层的展开与收缩效果
2015/08/07 Javascript
JS实现带关闭功能的阿里妈妈网站顶部滑出banner工具条代码
2015/09/17 Javascript
浅析Node.js 中 Stream API 的使用
2015/10/23 Javascript
js判断上传文件后缀名是否合法
2016/01/28 Javascript
js剪切板应用clipboardData实例解析
2016/05/29 Javascript
原生Javascript插件开发实践
2017/01/09 Javascript
详解node.js中的npm和webpack配置方法
2018/01/21 Javascript
angularjs手动识别字符串中的换行符方法
2018/10/02 Javascript
说说如何在Vue.js中实现数字输入组件的方法
2019/01/08 Javascript
JavaScript常用内置对象用法分析
2019/07/09 Javascript
详解Vue的异步更新实现原理
2020/12/22 Vue.js
[02:46]完美世界DOTA2联赛PWL DAY4集锦
2020/11/03 DOTA
python对html代码进行escape编码的方法
2015/05/04 Python
Python 绘图和可视化详细介绍
2017/02/11 Python
pytorch 修改预训练model实例
2020/01/18 Python
Python经典五人分鱼实例讲解
2021/01/04 Python
基于HTML5代码实现折叠菜单附源码下载
2015/11/27 HTML / CSS
建筑施工实习自我鉴定
2013/09/19 职场文书
工厂仓管员岗位职责
2014/01/01 职场文书
高中美术教学反思
2014/01/19 职场文书
淘宝活动策划方案
2014/02/06 职场文书
关于感恩的演讲稿200字
2014/08/26 职场文书
大学生考试作弊检讨书
2014/09/21 职场文书
技术员岗位职责范本
2015/04/11 职场文书
VW、VH适配移动端的解决方案与常见问题
2023/05/21 HTML / CSS