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

时间:2012-10-01 03:09:54

标签: 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属性),以使日志更有意义?

谢谢!

2 个答案:

答案 0 :(得分:4)

如果线程模块可用,则日志记录模块将使用threading.current_thread().name设置threadName LogRecord属性。

但是threading.current_thread threading.current_thread表示如果线程模块没有创建当前线程(因此是“Dummy-x”名称),将使用虚拟线程对象。

我认为可以通过猴子补丁extra将名称重置为更合适的名称。但是,更好的方法是在记录消息时使用logging.Formatter('%(levelname)-8s %(asctime)s %(qthreadname)-15s %(message)s') ... extras = {'qthreadname': get_qthreadname()} logging.warning(message, extra=extras) 字典:

{{1}}

答案 1 :(得分:0)

Qt5 documentation中,您可以调用setObjectName()来修改线程名称

要选择要给您的线程指定的名称(例如,在Linux上由命令ps -L标识),可以在启动线程之前调用setObjectName()。

如果不调用setObjectName(),则给线程提供的名称将是线程对象的运行时类型的类名(例如,对于Mandelbrot示例,为“ RenderThread”,因为QThread子类的名称。

不幸的是,它还指出:

当前在Windows的发行版中不可用。