多进程池工作器中的线程标识符

3

我曾认为Thread.ident是线程的唯一标识符,但现在在multiprocessing.poo.Pool中看到不同的工作进程报告相同的线程标识符threading.current_thread().ident。 为什么?

1个回答

4
根据不同的平台,线程ID可能是唯一的,也可能不是唯一的。需要注意的是,Python多进程库实际上使用进程而不是线程进行多进程处理,因此跨进程的线程ID实际上是一个特定于平台的实现细节。
在Unix/Linux系统中,线程ID在单个进程内保证是唯一的。但是,在不同进程之间,线程ID不能保证唯一性。然而,进程ID(pid)在不同进程之间是唯一的。因此,可以通过将这两个值组合在一起来获得唯一标识符。详细信息请参见man pthread页面http://man7.org/linux/man-pages/man7/pthreads.7.html
在Windows系统中,线程ID在整个计算机中是唯一的:https://msdn.microsoft.com/en-us/library/windows/desktop/ms686746(v=vs.85).aspx

@0x2c52 我花了一点时间去搜索,做这件事时,我会澄清我的回答。看起来Windows线程应该在整个机器上是独一无二的,而Linux线程将在进程内部是唯一的。从 man pthreads: http://man7.org/linux/man-pages/man7/pthreads.7.html --“线程ID仅在进程内部保证唯一。(在所有接受线程ID作为参数的pthread函数中,该ID根据定义只引用调用者所在进程中的线程。)” Windows: https://msdn.microsoft.com/en-us/library/windows/desktop/ms686746(v=vs.85).aspx - James Palawaga

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接