GNU/Linux >> Belajar Linux >  >> Linux

ID dari utas Python seperti yang dilaporkan oleh top

Ini tambalan untuk mengganti pengidentifikasi utas python dengan TID seperti yang ditampilkan di 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!")

Berkat posting ini, saya mendapatkan utas Python untuk melaporkan ID utas masing-masing. Pertama lakukan grep -r 'SYS_gettid' /usr/include/' . Saya mendapat baris:#define SYS_gettid __NR_gettid Setelah grepping lebih lanjut dengan grep -r '__NR_gettid' /usr/include/ , saya mendapat banyak baris yang cocok:

/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

Sekarang pilih salah satu yang cocok dengan arsitektur Anda. Milik saya adalah 186. Sekarang sertakan kode ini di semua skrip utas Python Anda untuk mendapatkan ID utas seperti yang terlihat oleh OS:

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

Linux
  1. Cara menginstal Python di Linux

  2. Instalasi Python 3.3.2?

  3. Cara:Pemrograman Socket dengan Python

  1. Apakah errno thread-safe?

  2. Thread ID vs Thread Handle

  3. Membuka utas Python di jendela konsol baru

  1. Mengonversi kode Python 2 Anda ke Python 3

  2. 20 Penggunaan Teratas Linux

  3. 10 Penyedia DSP Teratas