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 相关文章推荐
windows下安装python paramiko模块的代码
Feb 10 Python
Python中的is和id用法分析
Jan 26 Python
python魔法方法-自定义序列详解
Jul 21 Python
python实现可以断点续传和并发的ftp程序
Sep 13 Python
利用Python抓取行政区划码的方法
Nov 28 Python
python机器人行走步数问题的解决
Jan 29 Python
python爱心表白 每天都是浪漫七夕!
Aug 18 Python
python实现简单图片物体标注工具
Mar 18 Python
pytorch 预训练层的使用方法
Aug 20 Python
10个Python面试常问的问题(小结)
Nov 20 Python
Python利用Faiss库实现ANN近邻搜索的方法详解
Aug 03 Python
2021年值得向Python开发者推荐的VS Code扩展插件
Jan 25 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
全国FM电台频率大全 - 9 上海市
2020/03/11 无线电
php实现refresh刷新页面批量导入数据的方法
2014/12/23 PHP
PHP读MYSQL中文乱码的快速解决方法
2016/10/01 PHP
Span元素的width属性无效果原因及解决方案
2010/01/15 Javascript
js和jquery批量绑定事件传参数一(新猪猪原创)
2010/06/23 Javascript
基于jquery的一个OutlookBar类,动态创建导航条
2010/11/19 Javascript
jQuery EasyUI API 中文文档 - Panel面板
2011/09/30 Javascript
javascript之典型高阶函数应用介绍二
2013/01/10 Javascript
JS 获取滚动条高度示例代码
2013/10/24 Javascript
按钮接受回车事件的三种实现方法
2014/06/06 Javascript
详谈Ajax请求中的async:false/true的作用(ajax 在外部调用问题)
2017/02/10 Javascript
详解Angular.js中$http拦截器的介绍及使用
2017/07/04 Javascript
详解require.js配置路径的用法和css的引入
2017/09/06 Javascript
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
Python生成pdf文件的方法
2014/08/04 Python
Python模仿POST提交HTTP数据及使用Cookie值的方法
2014/11/10 Python
celery4+django2定时任务的实现代码
2018/12/23 Python
python爬虫获取小区经纬度以及结构化地址
2018/12/30 Python
python实现dijkstra最短路由算法
2019/01/17 Python
Python字符串对象实现原理详解
2019/07/01 Python
Django的用户模块与权限系统的示例代码
2019/07/24 Python
Python (Win)readline和tab补全的安装方法
2019/08/27 Python
pytorch中的上采样以及各种反操作,求逆操作详解
2020/01/03 Python
浅谈keras使用预训练模型vgg16分类,损失和准确度不变
2020/07/02 Python
python爬虫多次请求超时的几种重试方法(6种)
2020/12/01 Python
python对输出的奇数偶数排序实例代码
2020/12/04 Python
html5 video全屏播放/自动播放的实现示例
2020/08/06 HTML / CSS
模具专业推荐信
2013/10/30 职场文书
大学生军训广播稿
2014/01/24 职场文书
九年级语文教学反思
2014/02/04 职场文书
《罗布泊,消逝的仙湖》教学反思
2014/03/01 职场文书
2014爱耳日宣传教育活动总结
2014/03/09 职场文书
2015年化工厂工作总结
2015/05/04 职场文书
离婚起诉书范文2015
2015/05/19 职场文书
人与自然的观后感
2015/06/18 职场文书
Java基于字符界面的简易收银台
2021/06/26 Java/Android