Python记录器PID的顶部不同

时间:2019-04-09 16:28:31

标签: python python-3.x multithreading logging python-multithreading

我在main.py中初始化记录器,如下所示:

logging.basicConfig(level=logging.DEBUG, format='%(process)d - %(name)s - %(levelname)s - %(message)s')

然后在每个模块的顶部,我有:

logger = logging.getLogger(__name__)

当我在多个线程中使用记录器时,显示的进程ID是相同的(父ID),如果包含的话,线程ID也不同。但是,当我在Linux中使用top命令行工具时,每个线程看到的PID都不相同。

使用记录器时如何显示子PID?我需要缩小发生问题的范围,而不能仅仅知道模块名称。

例如,当我让主线程生成另一个线程时,顶部显示这两个条目:

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND    
 9686 jm354     20   0  528608  17584   9192 S   0.0   0.2   0:00.07 python                                                                                                          
 9690 jm354     20   0  528608  17584   9192 S   0.0   0.2   0:00.01 python    

尽管logger.info在不同的线程中使用,但是日志仅显示PID 9686。

我正在使用多处理队列和threading.Thread模块

import logging
import threading
from multiprocessing import Queue

1 个答案:

答案 0 :(得分:1)

好吧,他们在here上讨论了使用ctypes和Linux特定代码的解决方案。这不是便携式的,但可以用于调试。