On Fri, 30 Jan 2009 08:33:53 -0800 (PST), Alejandro 
<alejandro.weinst...@gmail.com> wrote:
On Jan 30, 9:11 am, Jean-Paul Calderone <exar...@divmod.com> wrote:
[clarification about threads]

Thank you for the clarification. I will reformulate my question:

pstree and also ntop (but not top) show a number for each thread, like
for instance:

$pstree -p 9197
python(9197)€ˆ€{python}(9555)
            †€{python}(9556)
            †€{python}(9557)
            †€{python}(9558)
            †€{python}(9559)
            †€{python}(9560)
            †€{python}(9561)
            †€{python}(9562)
            †€{python}(9563)
            „€{python}(9564)

Is is possible to get the number corresponding to each thread?

The reason I am interested is because one of my thread is hogging the
CPU, and want to find which one is the culprit.

I think someone mentioned calling gettid using ctypes earlier in this
thread.  Unfortunately, this is somewhat convoluted:

   exar...@charm:~$ python
   Python 2.5.2 (r252:60911, Jul 31 2008, 17:28:52)
   [GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2
   Type "help", "copyright", "credits" or "license" for more information.
   >>> import ctypes, os, threading, time
   >>> os.system("pstree -p " + str(os.getpid()))
   python(11427)───sh(11429)───pstree(11430)
   0
   >>> threading.Thread(target=time.sleep, args=(1000,)).start()
   >>> os.system("pstree -p " + str(os.getpid()))
   python(11427)─┬─sh(11436)───pstree(11437)
                 └─{python}(11431)
   0
   >>> ctypes.CDLL('libc.so.6').syscall(224)
   11427
>>>
224 comes from grepping /usr/include for SYS_gettid.  This is Linux
specific, and probably even architecture specific.  For a quick
debug hack, perhaps this is good enough, though.

Jean-Paul
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to