如何在Python中获取线程ID?

284 投票
8 回答
378689 浏览
提问于 2025-04-15 11:53

我有一个使用多线程的Python程序,还有一个工具函数writeLog(message),它会把时间戳和消息写到日志文件里。不过,生成的日志文件没有显示是哪个线程在发出哪个消息。

我想让writeLog()能够在消息中添加一些信息,以便识别是哪个线程在调用它。显然,我可以让线程把这些信息传递进来,但那样会麻烦很多。有没有类似于os.getpid()的东西,可以用来获取线程的信息呢?

8 个回答

46

这个功能现在在Python 3.8及以上版本中得到了支持哦 :)

你现在可以使用:threading.get_native_id()

https://github.com/python/cpython/commit/4959c33d2555b89b494c678d99be81a65ee864b0

https://github.com/python/cpython/pull/11993

98

使用 logging 模块,你可以在每条日志记录中自动添加当前线程的标识符。只需在你的日志格式字符串中使用以下 LogRecord 映射键之一:

%(thread)d : 线程 ID(如果可用的话)。

%(threadName)s : 线程名称(如果可用的话)。

然后用这些设置你的默认处理器:

logging.basicConfig(format="%(threadName)s:%(message)s")
370

threading.get_ident() 这个函数可以用来获取当前线程的身份标识,或者你也可以使用 threading.current_thread().ident (如果你用的是 Python 2.6 之前的版本,可以用 threading.currentThread().ident)。

撰写回答