相关疑难解决方法(0)

什么是python线程

我有几个关于Python线程的问题.

  1. Python线程是Python还是OS实现?
  2. 当我使用htop时,多线程脚本有多个条目 - 相同的内存消耗,相同的命令但不同的PID.这是否意味着[Python]线程实际上是一种特殊的进程?(我知道htop中有一个设置将这些线程显示为一个进程 - Hide userland threads)
  3. 文件说:

线程可以标记为"守护程序线程".这个标志的意义在于,当只剩下守护进程线程时,整个Python程序都会退出.

我的解释/理解是:当所有非守护程序线程终止时,主线程终止.

因此,如果"当只剩下守护程序线程时整个Python程序退出",那么python守护程序线程不是Python程序的一部分?

python multithreading

34
推荐指数
3
解决办法
8202
查看次数

Python记录器PID在顶部不同

我像这样初始化我的记录器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

6
推荐指数
1
解决办法
8135
查看次数