亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > Python 解決logging功能使用過程中遇到的一個問題

Python 解決logging功能使用過程中遇到的一個問題

熱門標(biāo)簽:淮安呼叫中心外呼系統(tǒng)如何 電話外呼系統(tǒng)招商代理 打印谷歌地圖標(biāo)注 蘇州人工外呼系統(tǒng)軟件 看懂地圖標(biāo)注方法 廣東旅游地圖標(biāo)注 京華圖書館地圖標(biāo)注 佛山通用400電話申請 電話機(jī)器人貸款詐騙

現(xiàn)象:

生產(chǎn)中心進(jìn)行拷機(jī)任務(wù)下了300個任務(wù),過了一陣時間后發(fā)現(xiàn)任務(wù)不再被調(diào)度起來,查看后臺日志發(fā)現(xiàn)日志輸出停在某個時間點(diǎn)。

分析:

1、首先確認(rèn)進(jìn)程存在并沒有dead。

2、然后用strace –p看了一下進(jìn)程,發(fā)現(xiàn)進(jìn)程卡在futex調(diào)用上面,應(yīng)該是在鎖操作上面出問題了。

3、用gdb attach進(jìn)程ID,用py-bt查看一下堆棧,發(fā)現(xiàn)堆棧的信息大致為:sig_handler(某個信號處理函數(shù))->auroralogger(自定義的日志函數(shù))->logging(python的logging模塊)->threading.acquire(獲取鎖)。從gdb的bt信息基本驗(yàn)證了上面的猜想,應(yīng)該是出現(xiàn)了死鎖。

4、Python的logging模塊本身肯定不會有死鎖的這種bug有可能出問題的就是我們的使用方式,看python中l(wèi)ogging模塊的doc,發(fā)現(xiàn)有一個有一個Thread Safety的章節(jié),內(nèi)容很簡單但是也一下就解釋了我遇到的這個問題,內(nèi)容如下:

The logging module is intended to be thread-safe without any special work needing to be done by its clients. It achieves this though using threading locks; there is one lock to serialize access to the module's shared data, and each handler also creates a lock to serialize access to its underlying I/O.

If you are implementing asynchronous signal handlers using the signal module, you may not be able to use logging from within such handlers. This is because lock implementations in the threading module are not always re-entrant, and so cannot be invoked from such signal handlers.

第一部分是說logging是線程安全的,通過threading的lock對公用的數(shù)據(jù)進(jìn)行了加鎖。

第二部分特意提到了在異步的信號處理函數(shù)中不能使用logging模塊,因?yàn)閠hreading的lock機(jī)制是不支持重入的。

這樣就解釋了上面我遇到的死鎖問題,因?yàn)槲以谛盘柼幚砗瘮?shù)中調(diào)用了不可以重入的logging模塊。

線程安全和可重入:

從上面的logging模塊來看線程安全和可重入不是等價的,那么這兩個概念之間有什么聯(lián)系、區(qū)別呢?

1、可重入函數(shù):從字面意思來理解就是這個函數(shù)可以重復(fù)調(diào)用,函數(shù)被多個線程亂序執(zhí)行甚至交錯執(zhí)行都能保證函數(shù)的輸出和函數(shù)單獨(dú)被執(zhí)行一次的輸出一致。也就是說函數(shù)的輸出只決定于輸入。

線程安全函數(shù):函數(shù)可以被多個線程調(diào)用,并且保證不會引用到錯誤的或者臟的數(shù)據(jù)。線程安全的函數(shù)輸出不僅僅依賴于輸入還可能依賴于被調(diào)用時的順序。

2、可重入函數(shù)和線程安全函數(shù)之間有一個最大的差異是:是否是異步信號安全??芍厝牒瘮?shù)在異步信號處理函數(shù)中可以被安全調(diào)用,而線程安全函數(shù)不保證可以在異步信號處理函數(shù)中被安全調(diào)用。

上面我們遇到的loggin模塊就是非異步信號安全的,在主線程中我們正在使用log函數(shù)而log函數(shù)調(diào)用了threading.lock來獲取到了鎖,此時一個異步信號產(chǎn)生程序跳轉(zhuǎn)到信號處理函數(shù)中,信號處理函數(shù)又正好調(diào)用了log函數(shù),因?yàn)榍耙粋€被調(diào)用的log函數(shù)還未釋放鎖,最后就形成了一個死鎖。

1、可重入函數(shù)必然是線程安全函數(shù)和異步信號安全函數(shù),線程安全函數(shù)不一定是可重入函數(shù)。

總結(jié):

異步信號處理函數(shù)中一定要盡可能的功能簡單并且不能調(diào)用不可重入的函數(shù)。

Python loggin模塊是線程安全但是是不可重入的。

補(bǔ)充:Python—logging模塊使用教程

簡單用法

日志等級

級別 何時使用
DEBUG 細(xì)節(jié)信息,僅當(dāng)診斷問題時適用。
INFO 確認(rèn)程序按預(yù)期運(yùn)行
WARNING 表明有已經(jīng)或即將發(fā)生的意外(例如:磁盤空間不足)。程序仍按預(yù)期進(jìn)行
ERROR 由于嚴(yán)重的問題,程序的某些功能已經(jīng)不能正常執(zhí)行
CRITICAL 嚴(yán)重的錯誤,表明程序已不能繼續(xù)執(zhí)行

控制臺輸出日志

import logging
logging.warning('Watch out!')  
logging.info('I told you so') 

將日志保存到文件并且設(shè)置時間和輸出格式

import logging
# 保存文件為example.log,記錄等級為DEBUG,即只記錄DENBUG及以上的日志
# 輸出格式為 2019-19-06 18:47:06 - WARNING - And this, too
logging.basicConfig(
  filename='example.log',
  filemode='w',
  level=logging.DEBUG,
  format='%(asctime)s - %(levelname)s - %(message)s',
  datefmt='%Y-%d-%d %H:%M:%S'
)
logging.debug('This message should go to the log file')
logging.info('So shoul this')
logging.warning('And this, too')

參數(shù)解釋

filename日志文件路徑

filemode記錄日志文件的模式,w為每次啟動程序都創(chuàng)建一個全新的文件記錄, a表示追加到文件末尾, 默認(rèn)為a

level記錄日志的等級

format日志輸出的格式

datefmt日志輸出時間的格式

使用配置文件配置日志

[loggers]
# 配置日志對象名, 默認(rèn)為root
keys=root, poj
[handlers]
# 日志配置名對象名
keys=writeFileHandlers
[formatters]
# 日志輸出格式對象名
keys=writeFileFormatters
[logger_root]
level=DEBUG
handlers=writeFileHandlers
[logger_poj]
level=DEBUG
handlers=writeFileHandlers
qualname=writeFileFormatters
propagate=0
[logger_leetcode]
level=DEBUG
handlers=writeFileHandlers
qualname=writeFileFormatters
propagate=0
[handler_writeFileHandlers]
# 設(shè)置writeFileHandlers對象的配置
class=FileHandler
level=DEBUG
formatter=writeFileFormatters
# 記錄在文件中,以追加的形式
args=("demo.log", "a")
[formatter_writeFileFormatters]
設(shè)置writeFileHandlers對象的輸出配置
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=%Y-%d-%m %H:%M:%S

使用配置文件

import logging.config
# 加載配置文件
logging.config.fileConfig('logging.conf')
# 獲取日志對象名為poj的
logger = logging.getLogger("poj")
logger.debug('This message should go to the log file')
logger.info('So shoul this')
logger.warning('And this, too')

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • Python日志模塊logging簡介
  • Python接口自動化淺析logging封裝及實(shí)戰(zhàn)操作
  • Python基礎(chǔ)之logging模塊知識總結(jié)
  • Python的logging模塊基本用法
  • Python logging簡介詳解

標(biāo)簽:衡水 呼和浩特 江蘇 中山 畢節(jié) 湖州 股票 駐馬店

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python 解決logging功能使用過程中遇到的一個問題》,本文關(guān)鍵詞  Python,解決,logging,功能,使用,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python 解決logging功能使用過程中遇到的一個問題》相關(guān)的同類信息!
  • 本頁收集關(guān)于Python 解決logging功能使用過程中遇到的一個問題的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    国产不卡福利| 黄视频网站在线免费观看| 国产成人精品影视| 国产激情视频在线观看| 国产伦精品一区三区视频| 中文字幕一区二区三区 精品| 色综合久久手机在线| 色综合久久天天综合| 久草免费资源| 精品国产一区二区三区久| 成人免费一级纶理片| 国产精品自拍在线观看| 日韩中文字幕在线播放| 国产一区二区精品在线观看| 亚洲第一色在线| 午夜欧美成人久久久久久| 成人高清视频在线观看| 国产视频久久久久| 日本在线www| 免费国产在线观看| 国产成人精品一区二区视频| 国产一区二区精品久| 国产网站免费在线观看| 日韩字幕在线| 国产亚洲精品成人a在线| 国产国产人免费视频成69堂| 精品视频在线看| 亚洲第一色在线| 91麻豆国产| 国产一区免费观看| 成人免费网站久久久| 亚洲精品影院| 国产极品白嫩美女在线观看看| 一本高清在线| 国产不卡在线播放| 中文字幕97| 美女免费精品视频在线观看| 欧美一区二区三区在线观看| 欧美日本免费| 午夜久久网| 日韩在线观看视频网站| 日本在线www| 黄色免费网站在线| 欧美日本国产| 国产一区二区精品久久91| 国产综合成人观看在线| 日本特黄特黄aaaaa大片| 九九国产| 免费一级片网站| 四虎影视久久久免费| 久久精品免视看国产成人2021| 国产视频网站在线观看| 日韩专区一区| 免费国产在线观看| 四虎影视久久久免费| 深夜做爰性大片中文| 国产伦精品一区三区视频| 成人免费观看的视频黄页| 精品久久久久久影院免费| 国产精品自拍一区| 香蕉视频久久| 一级女性大黄生活片免费| 日韩在线观看视频网站| 韩国三级香港三级日本三级| 人人干人人草| 国产原创视频在线| 国产一区二区精品久久| 久久久久久久网| 日本在线www| 久久精品免视看国产明星| 你懂的福利视频| 日日日夜夜操| 国产高清在线精品一区二区| 久久国产影院| 国产福利免费观看| 天天做日日爱夜夜爽| 欧美激情影院| 成人高清免费| 精品国产三级a∨在线观看| 精品国产一区二区三区久久久蜜臀| 欧美日本韩国| 九九免费精品视频| 国产一区免费观看| 一级毛片视频播放| 国产麻豆精品免费视频| 日本在线www| 99久久精品国产片| 亚洲第一视频在线播放| 久久成人性色生活片| 日韩在线观看视频免费| 韩国三级香港三级日本三级la| 精品视频免费观看| 香蕉视频久久| 久久精品欧美一区二区| 人人干人人草| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产精品12| 精品视频在线看| 精品久久久久久综合网| 精品国产一区二区三区久久久狼 | 午夜激情视频在线播放| 欧美一区二区三区在线观看| 久久久成人网| 久久久久久久男人的天堂| 国产伦精品一区三区视频| 一级女性大黄生活片免费| 九九精品在线播放| 国产亚洲男人的天堂在线观看| 天天做人人爱夜夜爽2020| 精品国产一区二区三区免费| 台湾美女古装一级毛片| 精品在线视频播放| 午夜欧美成人久久久久久| 精品在线免费播放| 日本在线www| 日韩一级精品视频在线观看| 成人a大片高清在线观看| 亚洲精品久久久中文字| 精品视频一区二区三区免费| 人人干人人草| 中文字幕97| 色综合久久天天综合观看| 午夜在线影院| 毛片高清| 国产麻豆精品免费密入口 | 久久99这里只有精品国产| 精品久久久久久中文字幕2017| 久久国产影视免费精品| 精品毛片视频| 夜夜操网| 久久久久久久免费视频| 欧美大片aaaa一级毛片| 精品美女| 99久久精品国产国产毛片| 国产激情一区二区三区| 亚欧乱色一区二区三区| 韩国三级视频在线观看| 青青青草视频在线观看| 九九免费精品视频| 欧美一级视| 青青青草影院 | 日本免费看视频| 久草免费资源| 国产视频一区二区在线播放| 成人免费观看男女羞羞视频| 久久国产精品只做精品| 精品国产三级a∨在线观看| 国产成人欧美一区二区三区的| 国产麻豆精品| 国产91素人搭讪系列天堂| 一a一级片| 九九免费高清在线观看视频| 国产高清在线精品一区二区 | 国产网站在线| 日本免费乱理伦片在线观看2018| 午夜欧美福利| 久草免费在线视频| 99热精品一区| 国产激情视频在线观看| 欧美1区| 国产一区免费观看| 青青青草视频在线观看| 99色视频在线观看| 亚洲精品影院久久久久久| 国产精品自拍亚洲| 久久国产精品只做精品| 黄色短视屏| 国产亚洲免费观看| 韩国毛片 免费| 国产高清在线精品一区二区| 深夜做爰性大片中文| a级毛片免费观看网站| 免费一级片网站| 久久国产影视免费精品| 日日日夜夜操| 精品视频免费看| 四虎影视精品永久免费网站| 欧美大片毛片aaa免费看| 免费国产在线视频| 色综合久久天天综合绕观看| 毛片的网站| 国产91精品一区二区| 黄视频网站在线观看| 可以免费看毛片的网站| 色综合久久手机在线| 欧美激情影院| 国产精品自拍在线观看| 97视频免费在线| 午夜激情视频在线观看| 精品国产一区二区三区精东影业| 午夜精品国产自在现线拍| 日韩男人天堂| 97视频免费在线观看| 可以免费看毛片的网站| 免费国产在线观看| 精品国产亚洲一区二区三区| 九九干| 欧美日本免费| 尤物视频网站在线| 精品视频在线观看一区二区 |