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多线程http下载实现示例
Dec 30 Python
跟老齐学Python之Python文档
Oct 10 Python
python获取本机mac地址和ip地址的方法
Apr 29 Python
windows 下python+numpy安装实用教程
Dec 23 Python
python编写微信远程控制电脑的程序
Jan 05 Python
python如何通过实例方法名字调用方法
Mar 21 Python
Redis使用watch完成秒杀抢购功能的代码
May 07 Python
Python爬虫 批量爬取下载抖音视频代码实例
Aug 16 Python
python中自带的三个装饰器的实现
Nov 08 Python
Python猴子补丁Monkey Patch用法实例解析
Mar 23 Python
python 使用tkinter+you-get实现视频下载器
Nov 17 Python
详解pycharm自动import所需的库的操作方法
Nov 30 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 时间计算问题小结
2009/01/04 PHP
PHP利用MySQL保存session的实现思路及示例代码
2014/09/09 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
2018/03/15 PHP
laravel数据库查询结果自动转数组修改实例
2021/02/27 PHP
一个JavaScript变量声明的知识点
2013/10/28 Javascript
当鼠标移动时出现特效的JQuery代码
2013/11/08 Javascript
jquery实现简单的自动播放幻灯片效果
2015/06/13 Javascript
JavaScript实现点击单选按钮改变输入框中文本域内容的方法
2015/08/12 Javascript
AngularJS单选框及多选框实现双向动态绑定
2016/01/13 Javascript
JavaScript预解析及相关技巧分析
2016/04/21 Javascript
使用jQuery实现WordPress中的Ctrl+Enter和@评论回复
2016/05/21 Javascript
实例解析jQuery中如何取消后续执行内容
2016/12/01 Javascript
JS html时钟制作代码分享
2017/03/03 Javascript
关于js中的鼠标事件总结
2017/07/11 Javascript
浅谈Vue.js应用的四种AJAX请求数据模式
2017/08/30 Javascript
小程序自定义导航栏兼容适配所有机型(附完整案例)
2020/04/26 Javascript
element el-table表格的二次封装实现(附表格高度自适应)
2021/01/19 Javascript
Python中的jquery PyQuery库使用小结
2014/05/13 Python
Python、Javascript中的闭包比较
2015/02/04 Python
Python实现的桶排序算法示例
2017/11/29 Python
Python并发编程协程(Coroutine)之Gevent详解
2017/12/27 Python
Django中的CBV和FBV示例介绍
2018/02/25 Python
python微信公众号之关键词自动回复
2018/06/15 Python
python numpy 显示图像阵列的实例
2018/07/02 Python
python的pygal模块绘制反正切函数图像方法
2019/07/16 Python
使用Python调取任意数字资产钱包余额功能
2019/08/15 Python
python global和nonlocal用法解析
2020/02/03 Python
Python实现分数序列求和
2020/02/25 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
Public Desire美国/加拿大:全球性的在线鞋类品牌
2018/12/17 全球购物
廉价连衣裙和婚纱礼服在线销售:Tbdress
2019/02/28 全球购物
BudgetAir印度:预订航班、酒店和汽车租赁
2019/07/07 全球购物
村长贪污检举信
2014/04/04 职场文书
人力资源求职信
2014/05/25 职场文书
React Fragment介绍与使用详解
2021/11/11 Javascript
基于Pygame实现简单的贪吃蛇游戏
2021/12/06 Python