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中global与nonlocal比较
Nov 21 Python
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
Sep 19 Python
python算法表示概念扫盲教程
Apr 13 Python
Python只用40行代码编写的计算器实例
May 10 Python
全面了解Nginx, WSGI, Flask之间的关系
Jan 09 Python
Python爬虫设置代理IP的方法(爬虫技巧)
Mar 04 Python
python中利用zfill方法自动给数字前面补0
Apr 10 Python
Python 爬取携程所有机票的实例代码
Jun 11 Python
Python 一键制作微信好友图片墙的方法
May 16 Python
详解Django将秒转换为xx天xx时xx分
Sep 27 Python
Django实现内容缓存实例方法
Jun 30 Python
Python实现上下文管理器的方法
Aug 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递归json类实例
2014/12/02 PHP
php实现俄罗斯乘法实例
2015/03/07 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
2015/06/24 PHP
一个很简单的办法实现TD的加亮效果.
2006/06/29 Javascript
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
2009/12/02 Javascript
picChange 图片切换特效的函数代码
2010/05/06 Javascript
Javascript 面向对象编程(一) 封装
2011/08/28 Javascript
javascipt匹配单行和多行注释的正则表达式
2013/11/20 Javascript
Javascript的严格模式strict mode详细介绍
2014/06/06 Javascript
jQuery实现鼠标经过时出现隐藏层文字链接的方法
2015/10/12 Javascript
jquery心形点赞关注效果的简单实现
2016/11/14 Javascript
JS实现下拉菜单列表与登录注册弹窗效果
2017/08/10 Javascript
layui前端框架之table表数据的刷新方法
2018/08/17 Javascript
微信小程序的tab选项卡的实现效果
2019/05/15 Javascript
微信小程序跨页面传递data数据方法解析
2019/12/13 Javascript
vue 路由缓存 路由嵌套 路由守卫 监听物理返回操作
2020/08/06 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
2020/09/09 Javascript
Python Queue模块详解
2014/11/30 Python
Python网页解析利器BeautifulSoup安装使用介绍
2015/03/17 Python
python中反射用法实例
2015/03/27 Python
Python中的super用法详解
2015/05/28 Python
Python程序中的观察者模式结构编写示例
2016/05/27 Python
python 调用HBase的简单实例
2016/12/18 Python
详解tensorflow训练自己的数据集实现CNN图像分类
2018/02/07 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
2018/02/08 Python
Python实现的购物车功能示例
2018/02/11 Python
pytorch 移动端部署之helloworld的使用
2020/10/30 Python
pycharm 实现调试窗口恢复
2021/02/05 Python
Python将QQ聊天记录生成词云的示例代码
2021/02/10 Python
法国面料和小百货在线商店:Mondial Tissus
2019/03/23 全球购物
意大利和国际最佳时尚品牌:Drestige
2019/12/28 全球购物
租房合同协议书
2014/04/09 职场文书
建筑质检员岗位职责
2015/04/08 职场文书
高中生军训感言
2015/08/01 职场文书
世界十大评分最高的动漫,CLANNAD上榜,第八赚足人们眼泪
2022/03/18 日漫
Python面试不修改数组找出重复的数字
2022/05/20 Python