Python& FreeBSD:threading.currentThread()。ident甚至在不同的进程中返回相同的值

时间:2011-04-16 18:08:39

标签: python multithreading freebsd

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

FreeBSD是否存在python线程的问题?

1 个答案:

答案 0 :(得分: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文档:

  

此线程的“线程标识符”,如果线程尚未启动,则为“无”。这是一个非零整数。请参见thread.get_ident()函数。 当线程退出并创建另一个线程时,可以回收线程标识符。

此外,我在REPL中修改了thid,如下所示:

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

当我在调用t2.start()的10秒内调用t1.start()时,他们有不同的ID,但如果我等了10秒以上,他们就有相同的ID。

如果您想区分不同的线程,只需拨打id(threading.currentThread())即可。 Python ID总是不同的。