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抓取网页图片并放到指定文件夹
Apr 24 Python
解析Python中while true的使用
Oct 13 Python
Python下载指定页面上图片的方法
May 12 Python
Python算法应用实战之队列详解
Feb 04 Python
Python面向对象之类的内置attr属性示例
Dec 14 Python
使用matlab或python将txt文件转为excel表格
Nov 01 Python
python3中sorted函数里cmp参数改变详解
Mar 12 Python
Python CSS选择器爬取京东网商品信息过程解析
Jun 01 Python
Python configparser模块应用过程解析
Aug 14 Python
python如何读取.mtx文件
Apr 22 Python
python 实现德洛内三角剖分的操作
Apr 22 Python
Flask response响应的具体使用
Jul 15 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
在Windows系统上安装PHP运行环境文字教程
2010/07/19 PHP
php 阴历-农历-转换类代码
2012/01/16 PHP
php计算十二星座的函数代码
2012/08/21 PHP
解析PHP中一些可能会被忽略的问题
2013/06/21 PHP
PHP中绘制图像的一些函数总结
2014/11/19 PHP
laravel 字段格式化 modle 字段类型转换方法
2019/09/30 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
js判断当前浏览器类型,判断IE浏览器方法
2014/06/02 Javascript
jQuery创建自定义的选择器用以选择高度大于100的超链接实例
2015/03/18 Javascript
AspNet中使用JQuery上传插件Uploadify详解
2015/05/20 Javascript
KnockoutJS 3.X API 第四章之数据控制流component绑定
2016/10/10 Javascript
angularjs中使用ng-bind-html和ng-include的实例
2017/04/28 Javascript
详解webpack提取第三方库的正确姿势
2017/12/22 Javascript
jquery动态添加带有样式的HTML标签元素方法
2018/02/24 jQuery
vue模仿网易云音乐的单页面应用
2019/04/24 Javascript
用Vue编写抽象组件的方法
2019/05/06 Javascript
Vue 数组和对象更新,但是页面没有刷新的解决方式
2019/11/09 Javascript
vuex管理状态 刷新页面保持不被清空的解决方案
2019/11/11 Javascript
使用vue实现通过变量动态拼接url
2020/07/22 Javascript
swiperjs实现导航与tab页的联动
2020/12/13 Javascript
[50:34]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python轻松实现代码编码格式转换
2015/03/26 Python
python获取程序执行文件路径的方法(推荐)
2018/04/26 Python
Python实现Singleton模式的方式详解
2019/08/08 Python
美国领先的奢侈手表在线零售商:WatchMaxx
2017/12/17 全球购物
机械专业个人求职自荐信格式
2013/09/21 职场文书
总经理职责范文
2013/11/08 职场文书
门卫人员岗位职责
2013/12/24 职场文书
大学同学聚会邀请函
2014/01/29 职场文书
五星级酒店餐饮部总监的标准岗位职责
2014/02/17 职场文书
兴趣小组活动总结
2014/05/05 职场文书
居委会四风问题个人对照检查材料
2014/09/25 职场文书
我的兄弟姐妹观后感
2015/06/15 职场文书
2016年4月份红领巾广播稿
2015/12/21 职场文书
postgresql 删除重复数据案例详解
2021/08/02 PostgreSQL
mysql全面解析json/数组
2022/07/07 MySQL