stdlib
logging软件包为开发人员/ devops
/支持人员提供了很多灵活性和功能,并且显然需要付出一定的代价。如果对性能的要求胜于对灵活性的要求,那么您需要采取其他措施。您是否按照文档中所述的步骤进行了优化?在合理的硬件上,典型的日志记录调用需要
数十微秒的 时间,这似乎很少。但是,仅由于产生的信息量可能需要花费大量时间才能解决,很少建议使用紧密循环。
查找调用者的代码可能非常昂贵,但是如果您想要进行记录调用的文件名和行号,则需要此代码。
QueueHandler适用于日志记录I /
O将花费大量时间且无法在带内完成的情况。例如,需要通过电子邮件将日志发送给站点管理员的Web应用程序不能冒险
SMTPHandler直接使用,因为电子邮件握手可能很慢。
不要忘记Python中的线程上下文切换很慢。你尝试了
SocketHandler吗?在文档中有一个合适的起点,用于一个单独的接收器进程,该进程执行实际的I / O到文件,电子邮件等的操作。因此,您的进程仅执行套接字I /
O,而不只是为了日志记录而进行上下文切换。使用域套接字或UDP可能仍然更快,尽管后者当然是有损的。
还有其他优化方法。例如,为了
emit()确保线程安全,日志记录中的标准处理程序会进行锁定,如果在您控制下的特定情况下,该处理程序没有争用,则可以有一个不操作获取和释放锁的处理程序子类。等等。



