You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下Python多进程线程ID相同的原因及跨平台差异问询

多进程线程ID重复及跨平台差异问题解答

你在VMware的Linux系统中运行了以下Python代码:

import threading
from multiprocessing import Process
import os

def task1():
    print("process1:", os.getpid(), "thread1:", threading.get_ident())

def task2():
    print("process2:", os.getpid(), "thread2:", threading.get_ident())

if __name__=='__main__':    
    p1 = Process(target=task1)
    p2 = Process(target=task2)
    p1.start()
    p2.start()
    p1.join()
    p2.join()

输出结果:

process1: 17106 thread1: 140006283367232
process2: 17107 thread2: 140006283367232

在Windows系统中运行相同代码,输出为:

process1: 18156 thread1: 23484
process2: 26452 thread2: 25688

1. 线程ID跨进程重复≠同一线程,不影响多核利用

你不用担心这两个进程会跑在同一个线程或同一个CPU核心上:

  • 线程ID的唯一性仅限进程内部:不同进程拥有完全独立的地址空间和线程ID命名空间。Linux下threading.get_ident()返回的是POSIX线程库的内部标识(本质是线程控制块的指针),每个新进程的主线程都可能拿到相同的指针值,但这只是虚拟地址的巧合,它们对应的是完全不同的线程实体。
  • 两个Process是独立的执行单元:操作系统会将这两个进程调度到不同的CPU核心上并行运行,你的多核利用需求完全可以实现,线程ID的重复只是表象,不影响实际执行逻辑。

2. 跨平台输出差异的核心原因:线程ID实现机制不同

Windows和Linux对线程ID的定义逻辑完全不同:

  • Linux:threading.get_ident()基于pthread_self()实现,返回的是进程内唯一的线程标识,不具备系统全局唯一性,所以不同进程的主线程ID很容易重复。
  • Windows:threading.get_ident()调用系统API GetCurrentThreadId(),返回的是系统全局唯一的线程ID,每个线程的ID在整个系统中都独一无二,因此不同进程的线程ID必然不同。

内容的提问来源于stack exchange,提问作者JING

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 23:54:24