2016-02-29 544 views
2

我正在使用asyncio模塊編寫我的代碼,其中包含大量信息/調試日誌記錄(logging.FileHandler)。我擔心大量使用asyncio會降低我的應用程序的性能,因爲日誌記錄會阻止操作。Python日誌記錄開銷

什麼是最好的解決方案呢?沒有找到關於日誌開銷的任何信息。

也許使用SocketHandlerMemoryHandler會有幫助嗎?對於我使用的指標statsd(這也是阻止操作,但必須非常快),但我更關心非阻塞日誌記錄。

代碼示例:

@asyncio.coroutine 
def creator_worker(self): 
    while not self.q.empty(): 
     with (yield from self.semaphore): 
      sample = yield from self.q.get() 
      logging.debug('Got new sample, processing') 
      # start processing 

我所知道的

import os 
os.environ['PYTHONASYNCIODEBUG'] = '1' 
import asyncio 

但是這不是我要找的。

謝謝

回答

2

您可以創建自定義日誌處理程序。 處理程序會將日誌記錄推入隊列。 另一個線程可能會從隊列中讀取數據並執行實際日誌記錄。

作爲一個選項,您可以使用SysLogHandler - 它非常快。 但是,無論如何,記錄太多會降低性能,你無能爲力。