我发现记录 I/O 是我们程序的性能瓶颈,所以我正在考虑将所有记录 I/O 移动到单独的线程。问题是我真的不知道python日志模块中发生了什么,而且我不想在python日志模块已经为我做的事情上浪费一天的时间,否则会浪费时间出于任何其他原因。我已经阅读了Python 日志记录文档,并且我发现对线程的唯一引用是指从多线程应用程序的不同线程访问记录器。
python 日志记录模块是否创建一个单独的线程来处理 I/O?如果没有,是否值得我花时间创建一个单独的线程来处理日志记录 I/O?
我发现记录 I/O 是我们程序的性能瓶颈,所以我正在考虑将所有记录 I/O 移动到单独的线程。问题是我真的不知道python日志模块中发生了什么,而且我不想在python日志模块已经为我做的事情上浪费一天的时间,否则会浪费时间出于任何其他原因。我已经阅读了Python 日志记录文档,并且我发现对线程的唯一引用是指从多线程应用程序的不同线程访问记录器。
python 日志记录模块是否创建一个单独的线程来处理 I/O?如果没有,是否值得我花时间创建一个单独的线程来处理日志记录 I/O?
不,它没有。您可以在来源中自行检查。
您可能可以Logger
使用 a 编写自己的线程类来Queue
对新日志记录进行排队。但是你应该看看关于当前线程的信息是如何在LogRecord
类中生成的。
正如 mata 所说,python 日志记录不会在自己的线程中运行。但是,与 3.2 一样,它确实提供了一些工具,可以轻松地让处理程序在自己的线程 QueueHandler 和 QueueListener 中运行。查看http://docs.python.org/3.3/howto/logging-cookbook.html#dealing-with-handlers-that-block的日志记录手册的“处理阻塞的处理程序”部分