python中关于日志(logging模块)的性能以及多进程的全面解析


本文摘自php中文网,作者黄舟,侵删。

使用Python来写后台任务时,时常需要使用输出日志来记录程序运行的状态,并在发生错误时将错误的详细信息保存下来,以别调试和分析。Python的logging模块就是这种情况下的好帮手。本文就介绍了python中日志logging模块性能及多进程的相关资料,需要的朋友可以参考下。

前言

Java 中最通用的日志模块莫过于 Log4j 了,在 python 中,也自带了 logging 模块,该模块的用法其实和 Log4j 类似。日志是记录操作的一种好方式。但是日志,基本都是基于文件的,也就是要写到磁盘上的。这时候,磁盘将会成为一个性能瓶颈。对于普通的服务器硬盘(机械磁盘,非固态硬盘),Python日志的性能瓶颈是多少呢?今天我们就来测一下。下面话不多说,来一起看看详细的介绍:

测试代码如下:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

#! /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性能:

7200转的机械磁盘,测了几次,每秒的能写入日志的行数(每行就是一条日志),数量基本在 2800-3000 之间。此时,磁盘IO基本已经跑满。(在3.3Ghz的CPU上,CPU占用大约40%)。

Python的logging多进程:

python 的 logging模块,是线程安全的。但对于多进程的程序来说,怎么去写日志文件呢?我的解决办法是,每个进程的PID,写一个单独的日志文件。再用算法把所有进程的日志合并起来,生成新的日志。

提示:由于磁盘IO已经到达瓶颈,所以多进程并不能提高日志性能。高性能日志,需要用缓存,或者分布式日志。

总结

以上就是python中关于日志(logging模块)的性能以及多进程的全面解析的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Python实现二维数组输出为图片_Python

Python详细安装方法

Python主要用于做什么

Python大神用的9个实用技巧分享给你

pycharm和Python区别

Python写的贪吃蛇游戏例子_Python

Python string、 bytes、 bytearray类型详解

Python 面向对象视频资料分享

Python os.chown() 方法是什么?它有什么样的作用?

circle是什么意思,3分钟教你用circle画圈

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...