Python与FreeBSD: threading.currentThread().ident在不同进程中返回相同值

3 投票
1 回答
1641 浏览
提问于 2025-04-16 15:53

正如标题所说,调用 threading.currentThread().ident 的结果总是返回 34382823872,即使是在不同的进程中也是如此。(使用的是 Python 3.1 和 FreeBSD)

这是不是 FreeBSD 在处理 Python 线程时的问题呢?

1 个回答

4

你是在REPL环境中测试这个吗?还是在一个真正的程序里?我问这个是因为我在REPL中运行下面的代码时,得到了相同的结果,但当我把它作为脚本运行时,线程的标识符却不同。

import threading

def thid():
    print threading.currentThread().ident

t1 = threading.Thread(target=thid)
t2 = threading.Thread(target=thid)
t1.start()
t2.start()
t1.join()
t2.join()

REPL的输出:

>>> t1.start()
4301111296
>>> t2.start()
4301111296

脚本的输出:

me@mine:~ $ python th.py 
4300935168
4302835712

我觉得这可能是正常现象;下面的内容来自于threading的文档:

这个线程的“线程标识符”,如果线程还没有启动则为None。这个标识符是一个非零的整数。可以查看thread.get_ident()这个函数。线程标识符可能会在一个线程结束后被回收,然后再创建另一个线程。

此外,我在REPL中像这样修改了thid

>>> def thid():
...     print threading.currentThread().ident
...     sleep(10)

当我在调用t1.start()后10秒内调用t2.start()时,它们的标识符是不同的,但如果我等超过10秒,它们的标识符就会变成相同的。

如果你想区分不同的线程,只需调用id(threading.currentThread())。Python的标识符总是不同的。

撰写回答