PID регистратор PID отличается в верхней - PullRequest
0 голосов
/ 09 апреля 2019

Я инициализирую свой регистратор в main.py примерно так:

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

Тогда в каждом модуле вверху у меня есть:

logger = logging.getLogger(__name__)

Когда я использую регистратор в нескольких потоках, показанный идентификатор процесса одинаков (идентификатор родителя), идентификатор потока отличается, если он включен. Однако, когда я использую инструмент командной строки top в linux, я вижу разные PID для каждого потока.

Как я могу показать дочерний PID, когда он использует регистратор? Мне нужно сузить место возникновения проблемы, и я не могу просто узнать имя модуля.

Например, когда мой основной поток порождает другой поток, top показывает эти две записи:

  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    

Но в журналах отображается только PID 9686, несмотря на то, что logger.info используется в разных потоках.

Я использую очередь многопроцессорной обработки и многопоточность. Модули потоков

import logging
import threading
from multiprocessing import Queue

1 Ответ

1 голос
/ 09 апреля 2019

Ну, более здесь они обсуждают решение, использующее ctypes и специфичный для Linux код.Это не переносимо, но может быть использовано для отладки.

...