15

Python スクリプトでさまざまなスレッドを開始しています。これらの各スレッドのメモリと CPU の使用状況を追跡したいと考えています。topそのためにandを使っps -eLfています。

しかし、 によって返される識別子は、および他の同様のプログラムthread.start_new_thread()によって表示されるスレッド PID とは異なることが判明しました。topPython スクリプトでこの PID を取得する方法はありますか? このようにして、どの PID がどのスレッドに属しているかを判別できます。

4

3 に答える 3

16

この投稿のおかげで、Python スレッドがそれぞれのスレッド ID を報告するようになりました。最初にgrep -r 'SYS_gettid' /usr/include/'. 行を取得しました:で#define SYS_gettid __NR_gettidさらにgrepするとgrep -r '__NR_gettid' /usr/include/、一致する行がたくさんありました:

/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

次に、アーキテクチャに一致するものを選択します。私の場合は 186 でした。すべての Python スレッド スクリプトに次のコードを含めて、OS から見たスレッド ID を取得します。

import ctypes
tid = ctypes.CDLL('libc.so.6').syscall(186)
于 2012-08-16T18:12:27.583 に答える
0

使用しているオペレーティング システムは何ですか?

非常に古いバージョンの Linux を除いて、各スレッドは同じ PID (プロセス ID) を持つ必要があります。thread.start_new_thread() の識別子は python の内部にあり、特定の実行スレッドを識別するために使用されます。

Linux スレッド化の詳細については、Linux の pthreads man ページを参照してください。

于 2012-08-16T17:24:31.977 に答える