日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:38日期:2022-06-22 13:40:38
現象:

生產中心進行拷機任務下了300個任務,過了一陣時間后發現任務不再被調度起來,查看后臺日志發現日志輸出停在某個時間點。

分析:

1、首先確認進程存在并沒有dead。

2、然后用strace ?p看了一下進程,發現進程卡在futex調用上面,應該是在鎖操作上面出問題了。

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

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

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對公用的數據進行了加鎖。

第二部分特意提到了在異步的信號處理函數中不能使用logging模塊,因為threading的lock機制是不支持重入的。

這樣就解釋了上面我遇到的死鎖問題,因為我在信號處理函數中調用了不可以重入的logging模塊。

線程安全和可重入:

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

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

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

2、可重入函數和線程安全函數之間有一個最大的差異是:是否是異步信號安全。可重入函數在異步信號處理函數中可以被安全調用,而線程安全函數不保證可以在異步信號處理函數中被安全調用。

上面我們遇到的loggin模塊就是非異步信號安全的,在主線程中我們正在使用log函數而log函數調用了threading.lock來獲取到了鎖,此時一個異步信號產生程序跳轉到信號處理函數中,信號處理函數又正好調用了log函數,因為前一個被調用的log函數還未釋放鎖,最后就形成了一個死鎖。

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

總結:

異步信號處理函數中一定要盡可能的功能簡單并且不能調用不可重入的函數。

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

補充:Python—logging模塊使用教程

簡單用法日志等級級別 何時使用 DEBUG 細節信息,僅當診斷問題時適用。 INFO 確認程序按預期運行 WARNING 表明有已經或即將發生的意外(例如:磁盤空間不足)。程序仍按預期進行 ERROR 由于嚴重的問題,程序的某些功能已經不能正常執行 CRITICAL 嚴重的錯誤,表明程序已不能繼續執行 控制臺輸出日志

import logginglogging.warning(’Watch out!’) logging.info(’I told you so’) 將日志保存到文件并且設置時間和輸出格式

import logging# 保存文件為example.log,記錄等級為DEBUG,即只記錄DENBUG及以上的日志# 輸出格式為 2019-19-06 18:47:06 - WARNING - And this, toologging.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’)參數解釋

filename日志文件路徑

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

level記錄日志的等級

format日志輸出的格式

datefmt日志輸出時間的格式

使用配置文件配置日志

[loggers]# 配置日志對象名, 默認為rootkeys=root, poj[handlers]# 日志配置名對象名keys=writeFileHandlers[formatters]# 日志輸出格式對象名keys=writeFileFormatters[logger_root]level=DEBUGhandlers=writeFileHandlers[logger_poj]level=DEBUGhandlers=writeFileHandlersqualname=writeFileFormatterspropagate=0[logger_leetcode]level=DEBUGhandlers=writeFileHandlersqualname=writeFileFormatterspropagate=0[handler_writeFileHandlers]# 設置writeFileHandlers對象的配置class=FileHandlerlevel=DEBUGformatter=writeFileFormatters# 記錄在文件中,以追加的形式args=('demo.log', 'a')[formatter_writeFileFormatters]設置writeFileHandlers對象的輸出配置format=%(asctime)s - %(name)s - %(levelname)s - %(message)sdatefmt=%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’)

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美日韩视频一区二区三区| 亚洲一区二区免费在线观看| 日韩欧乱色一区二区三区在线| 亚洲高清影视| 国产视频亚洲| 蜜桃免费网站一区二区三区| 一级欧洲+日本+国产| 视频一区二区不卡| 亚洲97av| 国产精品网在线观看| 精品国产午夜肉伦伦影院| 成人污污视频| 九色porny丨国产首页在线| 欧美在线观看视频一区| 国产视频亚洲| 91久久精品无嫩草影院| 国产精品22p| 久久久久久色| 久久99精品久久久野外观看| 国产成人免费| 亚洲黄色影院| 在线日韩中文| 91久久中文| 日本中文字幕视频一区| 国产精品三级| 综合日韩av| 99re国产精品| 欧美亚洲网站| 亚洲美女久久精品| 妖精视频成人观看www| 日韩久久一区| 精品久久97| av成人国产| 国产欧美日韩精品一区二区三区| 国产精品不卡| 亚洲欧美网站| 国产麻豆精品| 欧美日中文字幕| 日韩av一区二区在线影视| 国产精品久久久久久久久妇女| 欧美在线网站| 国产精品亚洲欧美一级在线| 久久青草久久| 日韩精品高清不卡| 高清在线一区| 亚洲麻豆一区| 91看片一区| 五月国产精品| 九色porny丨国产首页在线| 亚洲精品在线二区| 中文字幕一区二区精品区| 日韩视频一二区| 中文在线中文资源| 中文字幕日韩亚洲| 亚洲午夜天堂| 午夜久久av | 国产精品久久久免费| 久久男人天堂| 日韩国产在线一| 日韩在线第七页| 日韩avvvv在线播放| 欧美日一区二区| 美女久久久久久| 亚洲欧洲午夜| www在线观看黄色| 日本不卡高清视频| 欧美.日韩.国产.一区.二区| 欧美黄色一区| 蜜芽一区二区三区| 久久久人人人| 国产精品日本一区二区不卡视频| 不卡中文一二三区| 国产精品99视频| 日本欧美大码aⅴ在线播放| 日本美女一区| 国产精品乱战久久久| 鲁大师成人一区二区三区| 欧美一级鲁丝片| 国产亚洲欧美日韩在线观看一区二区| 亚洲v在线看| 免费在线成人| 日韩精品福利一区二区三区| 自由日本语亚洲人高潮| 成人精品国产亚洲| 91伊人久久| 亚洲一区二区三区中文字幕在线观看| 91精品蜜臀一区二区三区在线 | 国产精品白浆| 亚洲一区二区三区中文字幕在线观看| 久久久精品网| 黑人精品一区| 精品一区91| 国产精品激情| 欧美日韩一区二区国产| 激情丁香综合| 日本中文字幕一区二区视频| 亚洲一级网站| 日韩在线不卡| 精品三级久久久| 国产精品一区免费在线| 日韩影院在线观看| 尹人成人综合网| 国产一区丝袜| 久久国产三级| 日韩国产欧美三级| 日韩中文字幕| 综合一区av| 中文一区一区三区免费在线观 | 香蕉久久99| 欧洲av一区二区| 国产成人精品福利| 精品国产一区二| 欧美1区2区3| 国产精品男女| 最新亚洲一区| 色8久久久久| 蜜臀久久99精品久久久画质超高清| 欧美gv在线| 日韩精品一区二区三区免费观看| 人人香蕉久久| 婷婷激情久久| 红桃视频国产一区| 亚洲欧美网站| 午夜在线一区二区| 丝瓜av网站精品一区二区 | 精品美女在线视频| 国产一区二区三区国产精品| 国产激情久久| 久久精品欧洲| 中文字幕人成乱码在线观看| 丁香六月综合| 欧美+日本+国产+在线a∨观看| 亚洲激情中文在线| 久热精品在线| 91九色综合| 久久av电影| 91视频一区| 久久久久久久久丰满| 夜夜精品视频| 日韩动漫一区| 精品精品99| 久久国产电影| 亚洲精品小说| 日韩有吗在线观看| 国产精品2023| 久久国产直播| 日韩精品dvd| 亚洲作爱视频| 天堂va在线高清一区| 国产精品午夜av| 激情黄产视频在线免费观看| 亚洲成人不卡| 日韩视频二区| 日韩亚洲精品在线观看| 老司机精品视频网| 99久久夜色精品国产亚洲1000部| 国产婷婷精品| 欧美有码在线| 91欧美国产| 久久aⅴ国产紧身牛仔裤| 国产乱人伦精品一区| 亚洲www啪成人一区二区| 喷白浆一区二区| 久久中文在线| 亚洲一区二区成人| 国产精品一区免费在线| 日韩在线视频精品| 蜜桃视频第一区免费观看| 国产精品亚洲综合久久| 婷婷精品视频| 91精品视频一区二区| 亚洲www免费| 成人av动漫在线观看| 日韩高清在线不卡| 亚洲成人不卡| 亚洲精品激情| av资源新版天堂在线| 久久国产精品亚洲77777| 国产精品hd| 99热免费精品| 精品国产乱码久久久| 一区二区电影| 亚洲v在线看| 久久福利毛片| 五月天激情综合网| 日韩精品免费视频一区二区三区| 国产极品久久久久久久久波多结野| 黑森林国产精品av| 最近国产精品视频| 日韩欧美精品| 婷婷综合国产| 99久久九九| 久久一级电影| 国产精品九九| 午夜一级在线看亚洲| 久久久久久夜| 欧美日韩18| 亚洲制服少妇| 97精品中文字幕| 精品国产日韩欧美精品国产欧美日韩一区二区三区 |