python中日志logging模块的性能及多进程详解

作者:常城 时间:2023-08-17 23:19:07 

前言

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已经到达瓶颈,所以多进程并不能提高日志性能。高性能日志,需要用缓存,或者分布式日志。

来源:http://blog.csdn.net/chenggong2dm/article/details/52094410

标签:python,logging模块,多进程
0
投稿

猜你喜欢

  • Python使用pdb调试代码的技巧

    2022-11-18 04:36:06
  • Python+matplotlib实现堆叠图的绘制

    2023-07-21 17:38:35
  • mysql数据库备份及恢复命令 mysqldump,source的用法

    2024-01-22 21:05:10
  • Python如何获取文件路径/目录

    2021-09-01 09:05:18
  • Go 热加载之fresh详解

    2024-03-23 14:27:26
  • 详解Python中for循环是如何工作的

    2021-07-04 17:41:40
  • python 实时调取摄像头的示例代码

    2021-10-17 06:07:52
  • Android中Okhttp3实现上传多张图片同时传递参数

    2024-05-10 14:06:20
  • Python类的用法实例浅析

    2023-07-31 11:17:18
  • pytorch中的自定义数据处理详解

    2023-08-21 09:31:35
  • mysql数据库中的索引类型和原理解读

    2024-01-19 20:48:17
  • 在Python3中使用asyncio库进行快速数据抓取的教程

    2022-04-10 06:41:44
  • ACCESS转SQL Server2000需要注意的问题

    2007-11-18 15:25:00
  • Python实现聊天机器人的示例代码

    2022-11-16 18:10:56
  • 关闭时刷新父窗口两种方法

    2024-06-11 20:21:24
  • 适合所有网站的rss和xml聚合功能asp代码

    2011-04-06 11:19:00
  • GoLang 逃逸分析的机制详解

    2023-08-06 16:46:43
  • Python实现删除文件中含“指定内容”的行示例

    2022-01-15 02:56:28
  • Python中数字(Number)数据类型常用操作

    2022-06-01 20:58:47
  • 用Python将动态GIF图片倒放播放的方法

    2023-02-17 07:39:51
  • asp之家 网络编程 m.aspxhome.com