GNU/Linux >> LINUX-Kenntnisse >  >> Linux

ID eines Python-Threads, wie von top gemeldet

Hier ist ein Patch, um die Python-Thread-ID durch TID zu ersetzen wie in htop angezeigt :

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!")

Dank dieses Beitrags habe ich die Python-Threads dazu gebracht, ihre jeweiligen Thread-IDs zu melden. Führen Sie zuerst eine grep -r 'SYS_gettid' /usr/include/' aus . Ich habe eine Zeile:#define SYS_gettid __NR_gettid Beim weiteren Greifen nach grep -r '__NR_gettid' /usr/include/ , habe ich ein paar übereinstimmende Zeilen:

/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

Wählen Sie nun diejenige aus, die zu Ihrer Architektur passt. Meine war 186. Fügen Sie nun diesen Code in alle Ihre Python-Thread-Skripte ein, um die Thread-ID zu erhalten, wie sie vom Betriebssystem gesehen wird:

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

Linux
  1. Python 3.3.2-Installation?

  2. Top 10 DSP-Anbieter

  3. Die besten SEO-Tools

  4. Ist errno Thread-sicher?

  5. Thread-ID vs. Thread-Handle

Installieren Sie Python 3 auf Redhat 8

So überprüfen Sie die Python-Version

Python if..else-Anweisung

So verwenden Sie den TOP-Befehl

Linux-Top-Befehl

Top 20 der besten Python-IDE für Linux. Einige davon sind Open Source