我有几个关于Python线程的问题.
Hide userland threads)线程可以标记为"守护程序线程".这个标志的意义在于,当只剩下守护进程线程时,整个Python程序都会退出.
我的解释/理解是:当所有非守护程序线程终止时,主线程终止.
因此,如果"当只剩下守护程序线程时整个Python程序退出",那么python守护程序线程不是Python程序的一部分?
我像这样初始化我的记录器main.py:
logging.basicConfig(level=logging.DEBUG, format='%(process)d - %(name)s - %(levelname)s - %(message)s')
Run Code Online (Sandbox Code Playgroud)
然后在顶部的每个模块中我有:
logger = logging.getLogger(__name__)
Run Code Online (Sandbox Code Playgroud)
当我在多个线程中使用记录器时,显示的进程 ID 是相同的(父 ID),如果包含的话,线程 ID 是不同的。但是,当我top在 Linux 中使用命令行工具时,我看到每个线程有不同的 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
Run Code Online (Sandbox Code Playgroud)
但日志只显示 PID 9686,尽管 logger.info 在不同的线程中使用。
我正在使用多处理队列和 threading.Thread 模块
import logging
import threading
from multiprocessing import …Run Code Online (Sandbox Code Playgroud) python logging multithreading python-multithreading python-3.x