2016-02-29 5 views
2

Я пишу свой код, используя asyncio модуль с большим количеством информации/отладки регистрации (logging.FileHandler). Я обеспокоен тем, что широкое использование регистрации в asyncio снизит производительность моего приложения, поскольку ведение журнала блокирует работу.Накладные расходы на Python

Какое оптимальное решение для этого? Не удалось найти информацию о служебных данных.

Возможно, использование SocketHandler или MemoryHandler поможет? Для метрик я использую 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 - это довольно быстро. Но, во всяком случае, регистрация слишком сильно снижает производительность, вы ничего не можете с ней поделать.

Смежные вопросы