Представили? А теперь представьте, как вы плачете, потому что производительность упала на 20-30%.
И знаете, почему?
Да, всё верно. Питоний
print достаточно медленный, чтобы его блокирующий вызов во время обработки каждого запроса по итогу дал весьма неутешительные результаты при измерениях, особенно - на фоне результатов без этих принтов. Он может отнимать целые 60 микросекунд - что очень даже много, на фоне того, что запрос без этого обрабатывается всего за 140 микросекунд. Да, принт настолько сильно может влиять на производительность, если пихать его туда, где с высокой скоростью много раз в секунду должны происходить телодвижения.Но что же тогда делать? Как делать логгирование?! Мы все умрём??
Нет. Если вы не хотите использовать всеразличные логгеры, коих полным полно - а хотите сделать так, чтобы логгеров было полным-полно и плюс ваш - можете сделать многопоточный логгер.
Суть такого логгера состоит в том, что при условном вызове
logger.info(...), вместо того, чтобы прямо в нашей функции открывать файл на чтение (или вообще не закрывать дескриптор на протяжении всей жизни процесса; но если вы так сделаете, то знайте: я вас найду), или просто выводить надпись на экран аки принт - просто при инициализации логгера, создайте отдельный поток, а в конструкторе не забудьте прописать аттрибут с очередью. Думаю, объяснять про очереди мне не нужно - сами сможете почитать про Queue (кьюеуе, оно самое). Из этой самой очереди, наш второй поток и будет брать текст, который уже и будет записываться в файл/выводиться на экран. Поздравляю, вы сделали неблокирующий принт.