GNU/Linux >> Tutoriales Linux >  >> Linux

ID de un hilo de Python según lo informado por la parte superior

Aquí hay un parche para reemplazar el identificador de hilo de python con el TID como se muestra en htop :

def patch_thread_identifier():
    """Replace python thread identifier by TID."""
    # Imports
    import threading, ctypes
    # Define get tid function
    def gettid():
        """Get TID as displayed by htop."""
        libc = 'libc.so.6'
        for cmd in (186, 224, 178):
            tid = ctypes.CDLL(libc).syscall(cmd)
            if tid != -1:
                return tid
    # Get current thread
    current = threading.current_thread()
    # Patch get_ident (or _get_ident in python 2)
    threading.get_ident = threading._get_ident = gettid
    # Update active dictionary
    threading._active[gettid()] = threading._active.pop(current.ident)
    # Set new identifier for the current thread
    current._set_ident()
    # Done
    print("threading._get_ident patched!")

Gracias a esta publicación, conseguí que los subprocesos de Python informaran sus respectivos ID de subprocesos. Primero haz un grep -r 'SYS_gettid' /usr/include/' . Tengo una línea:#define SYS_gettid __NR_gettid Luego de un mayor grepping por grep -r '__NR_gettid' /usr/include/ , obtuve un montón de líneas coincidentes:

/usr/include/x86_64-linux-gnu/asm/unistd_32.h:#define __NR_gettid 224
/usr/include/x86_64-linux-gnu/asm/unistd_64.h:#define __NR_gettid 186
/usr/include/asm-generic/unistd.h:#define __NR_gettid 178

Ahora elija el que coincida con su arquitectura. El mío era 186. Ahora incluya este código en todos sus scripts de subprocesos de Python para obtener el ID del subproceso tal como lo ve el sistema operativo:

import ctypes
tid = ctypes.CDLL('libc.so.6').syscall(186)

Linux
  1. Convertir su código de Python 2 a Python 3

  2. Los 20 usos principales de Linux

  3. ¿Instalación de Python 3.3.2?

  4. Cómo:Programación de sockets en Python

  5. ¿Errno es seguro para subprocesos?

Instalar python 3 en Redhat 8

Cómo comprobar la versión de Python

Declaración de Python if..else

Cómo usar el comando SUPERIOR

Comando superior de Linux

Los 20 mejores IDE de Python para Linux. Algunos de ellos son de código abierto