最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python中日志logging模塊的性能及多進程詳解

 更新時間:2017年07月18日 09:32:18   作者:常城  
使用Python來寫后臺任務(wù)時,時常需要使用輸出日志來記錄程序運行的狀態(tài),并在發(fā)生錯誤時將錯誤的詳細信息保存下來,以別調(diào)試和分析。Python的logging模塊就是這種情況下的好幫手。本文就介紹了python中日志logging模塊性能及多進程的相關(guān)資料,需要的朋友可以參考下。

前言

Java 中最通用的日志模塊莫過于 Log4j 了,在 python 中,也自帶了 logging 模塊,該模塊的用法其實和 Log4j 類似。日志是記錄操作的一種好方式。但是日志,基本都是基于文件的,也就是要寫到磁盤上的。這時候,磁盤將會成為一個性能瓶頸。對于普通的服務(wù)器硬盤(機械磁盤,非固態(tài)硬盤),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" 

結(jié)果為:

Start test ....

2973.0 rows per second


Python的logging性能:

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

Python的logging多進程:

python 的 logging模塊,是線程安全的。但對于多進程的程序來說,怎么去寫日志文件呢?我的解決辦法是,每個進程的PID,寫一個單獨的日志文件。再用算法把所有進程的日志合并起來,生成新的日志。

提示:由于磁盤IO已經(jīng)到達瓶頸,所以多進程并不能提高日志性能。高性能日志,需要用緩存,或者分布式日志。

總結(jié)

以上就是這篇文章的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • django2筆記之路由path語法的實現(xiàn)

    django2筆記之路由path語法的實現(xiàn)

    這篇文章主要介紹了django2筆記之路由path語法的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • python 給圖像添加透明度(alpha通道)

    python 給圖像添加透明度(alpha通道)

    這篇文章主要介紹了python 給圖像添加透明度,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 淺述python中深淺拷貝原理

    淺述python中深淺拷貝原理

    Python中,對象的賦值,拷貝(深/淺拷貝)之間是有差異的,如果使用的時候不注意,就可能產(chǎn)生意外的結(jié)果,其實這個是由于共享內(nèi)存導(dǎo)致的結(jié)果,下面我們來簡單談下Python中的深拷貝和淺拷貝。
    2018-09-09
  • 最新評論

    闽清县| 肥东县| 微山县| 德兴市| 镇江市| 会同县| 平塘县| 如皋市| 佳木斯市| 石泉县| 宿州市| 桐柏县| 稻城县| 吕梁市| 和林格尔县| 韶关市| 新龙县| 城口县| 盐边县| 焦作市| 东至县| 忻州市| 玛纳斯县| 苍山县| 玉山县| 本溪市| 昭苏县| 紫金县| 浙江省| 台湾省| 历史| 凤翔县| 平南县| 西华县| 江西省| 西乌珠穆沁旗| 永年县| 沙洋县| 巴彦县| 凯里市| 彩票|