如何在pyqt中设置QThread的名称?

Xav*_* V. 7 python multithreading pyqt qthread

我正在使用QtCore.QThread(来自PyQt4).

要记录,我还使用以下格式化程序:

logging.Formatter('%(levelname)-8s %(asctime)s %(threadName)-15s %(message)s')

生成的日志是:

DEBUG 2012-10-01 03:59:31,479 Dummy-3 my_message

我的问题是我想更明确地知道哪个线程正在记录... Dummy-3对我来说不是最明确的名字....

有没有办法将一个名称设置为一个QtCore.QThread可供日志记录模块使用的名称(作为LogRecord属性),以使日志更有意义?

谢谢 !

ekh*_*oro 5

如果线程模块可用,日志模块将用于threading.current_thread().name设置threadNameLogRecord 属性。

但是,文档threading.current_thread说,一个哑线程对象将如果当前线程不是由threading模块(因此“虚拟-X”的名称)创建使用。

我想可以通过猴子补丁threading.current_thread将名称重置为更合适的名称。但肯定更好的方法是extra在记录消息时使用字典:

logging.Formatter('%(levelname)-8s %(asctime)s %(qthreadname)-15s %(message)s')
...
extras = {'qthreadname': get_qthreadname()}
logging.warning(message, extra=extras)
Run Code Online (Sandbox Code Playgroud)