python中日志logging模塊的性能及多進(jìn)程詳解
前言
Java 中最通用的日志模塊莫過于 Log4j 了,在 python 中,也自帶了 logging 模塊,該模塊的用法其實(shí)和 Log4j 類似。日志是記錄操作的一種好方式。但是日志,基本都是基于文件的,也就是要寫到磁盤上的。這時(shí)候,磁盤將會(huì)成為一個(gè)性能瓶頸。對(duì)于普通的服務(wù)器硬盤(機(jī)械磁盤,非固態(tài)硬盤),Python日志的性能瓶頸是多少呢?今天我們就來測一下。下面話不多說,來一起看看詳細(xì)的介紹:
測試代碼如下:
#! /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 # 測試時(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ī)械磁盤,測了幾次,每秒的能寫入日志的行數(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é)
以上就是這篇文章的全部內(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)文章
使用Tensorflow實(shí)現(xiàn)可視化中間層和卷積層
今天小編就為大家分享一篇使用Tensorflow實(shí)現(xiàn)可視化中間層和卷積層,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01TensorFlow入門使用 tf.train.Saver()保存模型
這篇文章主要介紹了TensorFlow入門使用 tf.train.Saver()保存模型,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04詳解python環(huán)境安裝selenium和手動(dòng)下載安裝selenium的方法
這篇文章主要介紹了詳解python環(huán)境安裝selenium和手動(dòng)下載安裝selenium的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03Python爬取騰訊疫情實(shí)時(shí)數(shù)據(jù)并存儲(chǔ)到mysql數(shù)據(jù)庫的示例代碼
這篇文章主要介紹了Python爬取騰訊疫情實(shí)時(shí)數(shù)據(jù)并存儲(chǔ)到mysql數(shù)據(jù)庫的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03Centos Python2 升級(jí)到Python3的簡單實(shí)現(xiàn)
下面小編就為大家?guī)硪黄狢entos Python2 升級(jí)到Python3的簡單實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-06-06Python Django2 model 查詢介紹(條件、范圍、模糊查詢)
這篇文章主要介紹了Python Django2 model 查詢介紹(條件、范圍、模糊查詢),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03基于pygame實(shí)現(xiàn)童年掌機(jī)打磚塊游戲
這篇文章主要為大家詳細(xì)介紹了基于pygame實(shí)現(xiàn)童年掌機(jī)打磚塊游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02