Python与FreeBSD: threading.currentThread().ident在不同进程中返回相同值
正如标题所说,调用 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的标识符总是不同的。