python中日志logging模塊的性能及多進(jìn)程詳解
前言
Java 中最通用的日志模塊莫過于 Log4j 了,在 python 中,也自帶了 logging 模塊,該模塊的用法其實(shí)和 Log4j 類似。日志是記錄操作的一種好方式。但是日志,基本都是基于文件的,也就是要寫到磁盤上的。這時(shí)候,磁盤將會(huì)成為一個(gè)性能瓶頸。對(duì)于普通的服務(wù)器硬盤(機(jī)械磁盤,非固態(tài)硬盤),Python日志的性能瓶頸是多少呢?今天我們就來測(cè)一下。下面話不多說,來一起看看詳細(xì)的介紹:
測(cè)試代碼如下:
#! /usr/bin/env python
#coding=utf-8
# ============================
# Describe : 給平臺(tái)提供的日志
# 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 # 測(cè)試時(shí)間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"
結(jié)果為:
Start test ....
2973.0 rows per second

Python的logging性能:
7200轉(zhuǎn)的機(jī)械磁盤,測(cè)了幾次,每秒的能寫入日志的行數(shù)(每行就是一條日志),數(shù)量基本在 2800-3000 之間。此時(shí),磁盤IO基本已經(jīng)跑滿。(在3.3Ghz的CPU上,CPU占用大約40%)。

Python的logging多進(jìn)程:
python 的 logging模塊,是線程安全的。但對(duì)于多進(jìn)程的程序來說,怎么去寫日志文件呢?我的解決辦法是,每個(gè)進(jìn)程的PID,寫一個(gè)單獨(dú)的日志文件。再用算法把所有進(jìn)程的日志合并起來,生成新的日志。
提示:由于磁盤IO已經(jīng)到達(dá)瓶頸,所以多進(jìn)程并不能提高日志性能。高性能日志,需要用緩存,或者分布式日志。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- Python使用logging實(shí)現(xiàn)多進(jìn)程安全的日志模塊
- python?logging多進(jìn)程多線程輸出到同一個(gè)日志文件的實(shí)戰(zhàn)案例
- python 實(shí)現(xiàn)多進(jìn)程日志輪轉(zhuǎn)ConcurrentLogHandler
- python多進(jìn)程下實(shí)現(xiàn)日志記錄按時(shí)間分割
- python logging日志模塊以及多進(jìn)程日志詳解
- 詳解Python中l(wèi)ogging日志模塊在多進(jìn)程環(huán)境下的使用
- python多進(jìn)程日志以及分布式日志的實(shí)現(xiàn)方式
相關(guān)文章
Python調(diào)用ChatGPT制作基于Tkinter的桌面時(shí)鐘
這篇文章主要為大家詳細(xì)介紹了Python如何調(diào)用ChatGPT制作基于Tkinter的桌面時(shí)鐘,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2023-03-03
Python實(shí)現(xiàn)四個(gè)經(jīng)典小游戲合集
這篇文章主要介紹了利用Python編寫一個(gè)經(jīng)典小游戲的合集,包括:貪吃蛇,掃雷,俄羅斯方塊,五子棋。感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2021-12-12
python實(shí)現(xiàn)復(fù)制文件到指定目錄
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)復(fù)制文件到指定的目錄下,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10
django2筆記之路由path語法的實(shí)現(xiàn)

