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获取DLL和EXE文件版本号的方法
Mar 10 Python
python3使用requests模块爬取页面内容的实战演练
Sep 25 Python
利用Python代码实现数据可视化的5种方法详解
Mar 25 Python
python利用微信公众号实现报警功能
Jun 10 Python
如何优雅地改进Django中的模板碎片缓存详解
Jul 04 Python
django从请求到响应的过程深入讲解
Aug 01 Python
python使用matplotlib绘制热图
Nov 07 Python
Django 项目布局方法(值得推荐)
Mar 22 Python
Python实现电视里的5毛特效实例代码详解
May 15 Python
pyecharts在数据可视化中的应用详解
Jun 08 Python
CocosCreator ScrollView优化系列之分帧加载
Apr 14 Python
教你用python控制安卓手机
May 13 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
改造一台复古桌面收音机
2021/03/02 无线电
PHP的FTP学习(一)
2006/10/09 PHP
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
2014/06/23 PHP
PHP文件上传判断file是否己选择上传文件的方法
2014/11/10 PHP
向fckeditor编辑器插入指定代码的方法
2007/05/25 Javascript
Jquery中dialog属性小记
2010/09/03 Javascript
jquery怎样实现ajax联动框(二)
2013/03/08 Javascript
javascript中的onkeyup和onkeydown区别介绍
2013/04/28 Javascript
javascript判断变量是否有值的方法
2015/04/20 Javascript
jQuery热气球动画半透明背景的后台登录界面代码分享
2015/08/28 Javascript
jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
2016/06/08 Javascript
JS实现AES加密并与PHP互通的方法分析
2017/04/19 Javascript
使用jQuery实现购物车结算功能
2017/08/15 jQuery
javascript设计模式 ? 组合模式原理与应用实例分析
2020/04/14 Javascript
JS 图片压缩原理与实现方法详解
2020/04/29 Javascript
文章或博客自动生成章节目录索引(支持三级)的实现代码
2020/05/10 Javascript
vue setInterval 定时器失效的解决方式
2020/07/30 Javascript
Vue中关闭弹窗组件时销毁并隐藏操作
2020/09/01 Javascript
[49:27]LGD vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[02:16]完美世界DOTA2联赛PWL S3 集锦第三期
2020/12/21 DOTA
Python urllib模块urlopen()与urlretrieve()详解
2013/11/01 Python
python实现斐波那契数列的方法示例
2017/01/12 Python
Python正则表达式完全指南
2017/05/25 Python
浅谈Python NLP入门教程
2017/12/25 Python
python实现顺序表的简单代码
2018/09/28 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
python使用Thread的setDaemon启动后台线程教程
2020/04/25 Python
HTML5边玩边学(2)基础绘图实现方法
2010/09/21 HTML / CSS
信息管理员岗位职责
2013/12/01 职场文书
对外汉语专业大学生职业生涯规划范文
2014/09/13 职场文书
致接力运动员加油稿
2015/07/21 职场文书
幼儿园卫生保健制度
2015/08/05 职场文书
2016年父亲节寄语
2015/12/04 职场文书
pycharm2021激活码使用教程(永久激活亲测可用)
2021/03/30 Python
Go语言中的UTF-8实现
2021/04/26 Golang
Python实现对齐打印 format函数的用法
2022/04/28 Python