Python服务端多线程调试技巧

January 07, 2016

Tags:trick

邮件组里碰到一位同学的问题,问题描述如下:



其中引申出一个问题:对于长期运行的服务,如何查找或确认哪个客户对应哪个线程?
记录线程号和对应的连接信息或许满足调试需求(即:确认是哪个客户端连接进来的)。
但是最近几个版本Python的threading.ident输出的玩意跟系统是对应不上的,不是LWP ID,所以搞一个看起来很tricky的方法:
每个线程里可以置一段:

import ctypes
ctypes.CDLL('libc.so.6').syscall(224)

# 224对应的Linux系统调用为gettid,将调用后的返回值记录下来,这样就可以跟ps -Lf [PID] 看到的LWP的ID对比了

· EOF ·