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

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

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

瀏覽:40日期: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久久,三上悠亚国产精品一区二区三区
91大神在线观看线路一区| 国产精品第十页| 成人午夜在线| 你懂的网址国产 欧美| 91精品一区| 国产亚洲欧美日韩在线观看一区二区| 亚洲精品国产精品粉嫩| 日本大胆欧美人术艺术动态| 噜噜噜躁狠狠躁狠狠精品视频| 国产婷婷精品| 热久久免费视频| 蜜桃视频一区二区三区| 亚洲狼人精品一区二区三区| 亚洲激情黄色| 日韩中文字幕麻豆| 婷婷精品在线观看| 欧美一区91| 国产精品mm| caoporn视频在线| 亚洲最新无码中文字幕久久| www成人在线视频| 久久精品国产www456c0m| 99精品视频在线观看免费播放| 亚洲a在线视频| 国产精品试看| 日本不卡一区二区| 国产精东传媒成人av电影| 久久伊人久久| 国产成人久久| 久久精品免费一区二区三区| 欧美a级片一区| 欧美中文日韩| 国产精品久久久久久久久久白浆| 国产aa精品| 香蕉国产精品| 日韩欧美美女在线观看| 国产乱码精品一区二区三区四区 | 高潮久久久久久久久久久久久久| 久久青草久久| 中文字幕一区二区av| 国产免费久久| 视频福利一区| 亚洲精品乱码久久久久久蜜桃麻豆| 久久国产乱子精品免费女| 伊人久久视频| 中文字幕av一区二区三区人| 精品一区二区三区免费看| 香蕉国产精品| 麻豆精品新av中文字幕| 色婷婷久久久| 日韩在线观看一区二区三区| 国产 日韩 欧美 综合 一区| 美女尤物久久精品| 麻豆精品视频在线观看免费| 亚洲特色特黄| 国产精品香蕉| 99在线观看免费视频精品观看| 久久国产尿小便嘘嘘| 久久久久久美女精品| 欧美亚洲免费| 日韩精品麻豆| 国产无遮挡裸体免费久久| 精品亚洲美女网站| 国产精品中文字幕亚洲欧美| www.51av欧美视频| 亚洲久久一区| 欧美日中文字幕| 国产精品sm| 亚洲三级国产| 欧美精选一区二区三区| 国产精品va视频| 亚洲色图国产| 香蕉久久精品| 国产一区二区精品福利地址| 日韩精品欧美成人高清一区二区| 日本美女一区| 国产精选久久| 亚洲精品在线国产| japanese国产精品| 欧美激情网址| 在线一区欧美| 黑人精品一区| 国产麻豆一区| 老鸭窝毛片一区二区三区| 精品视频一区二区三区在线观看 | 午夜久久av | 日韩国产欧美一区二区三区| 欧美午夜精品一区二区三区电影| 国产伦精品一区二区三区在线播放| 国产偷自视频区视频一区二区| 国产精品99在线观看| 欧美日韩一区自拍| 黄色亚洲免费| 日韩国产激情| 免费一区二区三区在线视频| 日韩欧美四区| 男人的天堂亚洲一区| 久久精品国产亚洲夜色av网站 | 午夜精品一区二区三区国产| 色乱码一区二区三区网站| 欧美日一区二区在线观看| 美国三级日本三级久久99| 蜜桃国内精品久久久久软件9| 久久精品国产精品亚洲毛片| 日韩av中文在线观看| 玖玖精品视频| 99成人在线| 亚洲欧美一区在线| 亚洲调教视频在线观看| 国产一区二区三区天码| 日韩激情一区二区| 在线亚洲精品| 一区免费视频| 久久亚洲国产| 91看片一区| 在线看片国产福利你懂的| 精品亚洲成人| 精品久久久网| 精品国产精品国产偷麻豆| 国产精品白丝久久av网站| 久久国内精品自在自线400部| 亚洲精品在线国产| 综合五月婷婷| 亚洲狼人精品一区二区三区| 亚洲精品进入| 日本不卡视频在线观看| 日韩在线观看一区二区| 模特精品在线| 亚洲精品欧美| 日韩精品五月天| 国产精品一国产精品| 国产欧美一区二区三区国产幕精品 | 亚洲精品网址| 亚洲经典在线| 麻豆9191精品国产| 日韩精品一卡二卡三卡四卡无卡| 久久www成人_看片免费不卡| 99成人在线| 欧美午夜不卡影院在线观看完整版免费| 亚洲高清不卡| 中文精品在线| 在线看片日韩| 欧美日韩一区二区三区在线电影| 国产精品亚洲四区在线观看| 精品无人区麻豆乱码久久久| 色在线视频观看| 欧美日韩色图| 中文字幕免费精品| 青青草国产精品亚洲专区无| 国产精品1区在线| 国产v日韩v欧美v| 欧美日韩国产在线观看网站 | 中文字幕一区二区三区日韩精品| 日韩高清不卡一区二区| 国产精品免费精品自在线观看| 久久97久久97精品免视看秋霞| 在线人成日本视频| 国产亚洲高清视频| 国产三级一区| 天堂а√在线最新版中文在线| 99久久亚洲精品| 亚洲天堂av资源在线观看| 日本少妇精品亚洲第一区| 国产欧美日韩一区二区三区四区| 精品日产乱码久久久久久仙踪林| 久久九九国产| 亚洲精品动态| 久久精品亚洲| 亚洲国产一区二区三区在线播放| 在线观看一区| 国产一区不卡| 国产精品日本欧美一区二区三区| 欧美在线看片| 亚洲一级少妇| 综合色就爱涩涩涩综合婷婷| 久久精品伊人| 亚洲作爱视频| 国产精品手机在线播放| 成人精品国产亚洲| 国产精品美女久久久浪潮软件| 国产精品一二| 激情综合亚洲| 欧美日韩在线精品一区二区三区激情综合| 国产一区日韩| 国产精品呻吟| 久久精品国产亚洲aⅴ| 不卡中文字幕| 欧美影院视频| 久久久人人人| 日本精品另类| 亚洲特色特黄| 国产精品www994| 黑丝一区二区三区| 国产精品对白| 一区视频在线| 精品一区二区三区四区五区| 亚洲欧美日本国产专区一区| 精品国产网站| 亚洲网址在线观看| 欧洲一区二区三区精品|