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中self原理实例分析
Apr 30 Python
python的random模块及加权随机算法的python实现方法
Jan 04 Python
200行自定义python异步非阻塞Web框架
Mar 15 Python
Windows下python3.6.4安装教程
Jul 31 Python
Python:Numpy 求平均向量的实例
Jun 29 Python
用python3 返回鼠标位置的实现方法(带界面)
Jul 05 Python
pytorch 自定义数据集加载方法
Aug 18 Python
Python hashlib模块加密过程解析
Nov 05 Python
python读写Excel表格的实例代码(简单实用)
Dec 19 Python
python 字符串的驻留机制及优缺点
Jun 19 Python
聊聊python中的循环遍历
Sep 07 Python
selenium携带cookies模拟登陆CSDN的实现
Jan 19 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新建文件自动编号的思路与实现
2011/06/27 PHP
php中ftp_chdir与ftp_cdup函数用法
2014/11/18 PHP
PHP实现生成唯一会员卡号
2015/08/24 PHP
PHP利用超级全局变量$_GET来接收表单数据的实例
2016/11/05 PHP
提取jquery的ready()方法单独使用示例
2014/03/25 Javascript
jquery JSON的解析方式示例介绍
2014/07/27 Javascript
28个常用JavaScript方法集锦
2015/01/14 Javascript
js实现固定显示区域内自动缩放图片的方法
2015/07/18 Javascript
JS深度拷贝Object Array实例分析
2016/03/31 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
2016/05/16 Javascript
微信小程序实现鼠标拖动效果示例
2017/12/01 Javascript
Angular使用操作事件指令ng-click传多个参数示例
2018/03/27 Javascript
vue mounted组件的使用
2018/06/18 Javascript
jQuery无冲突模式详解
2019/01/17 jQuery
js prototype和__proto__的关系是什么
2019/08/23 Javascript
深入理解Antd-Select组件的用法
2020/02/25 Javascript
Vue组件间的通信pubsub-js实现步骤解析
2020/03/11 Javascript
[03:17]DOTA2英雄基础教程 剧毒术士
2013/12/12 DOTA
详解Python中的各种函数的使用
2015/05/24 Python
python实现list元素按关键字相加减的方法示例
2017/06/09 Python
Python程序退出方式小结
2017/12/09 Python
Pythony运维入门之Socket网络编程详解
2019/04/15 Python
python UDP(udp)协议发送和接收的实例
2019/07/22 Python
Python列表切片常用操作实例解析
2019/12/16 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
python查看矩阵的行列号以及维数方式
2020/05/22 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的示例代码
2021/02/24 HTML / CSS
联想智利官方网站:Lenovo Chile
2020/06/03 全球购物
PHP两种查询函数array/row的区别
2013/06/03 面试题
电大毕业生自我鉴定
2014/04/10 职场文书
成立公司计划书
2014/05/07 职场文书
学习经验演讲稿
2014/05/10 职场文书
意向书范本
2014/07/29 职场文书
设备收款委托书范本
2014/10/02 职场文书
三下乡活动心得体会
2016/01/23 职场文书
浅谈CSS不规则边框的生成方案
2021/05/25 HTML / CSS