GNU/Linux >> Tutoriels Linux >  >> Linux

ID d'un thread Python tel que rapporté par top

Voici un patch pour remplacer l'identifiant de thread python par le TID comme affiché dans 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!")

Grâce à ce post, j'ai demandé aux threads Python de signaler leurs ID de thread respectifs. Faites d'abord un grep -r 'SYS_gettid' /usr/include/' . J'ai une ligne :#define SYS_gettid __NR_gettid Après un nouveau gripping par grep -r '__NR_gettid' /usr/include/ , j'ai un tas de lignes correspondantes :

/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

Choisissez maintenant celui qui correspond à votre architecture. Le mien était de 186. Incluez maintenant ce code dans tous vos scripts de thread Python pour obtenir l'ID de thread tel qu'il est vu par le système d'exploitation :

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

Linux
  1. Comment installer Python sur Linux

  2. Conversion de votre code Python 2 en Python 3

  3. Top 20 des utilisations de Linux

  4. Installer Python 3.3.2 ?

  5. Guide pratique :programmation de sockets en Python

Installer python 3 sur Redhat 8

Comment vérifier la version de Python

Instruction Python if..else

Comment utiliser la commande TOP

Commande supérieure de Linux

Top 20 des meilleurs IDE Python pour Linux. Certains d'entre eux sont Open Source