开发者

Python & FreeBSD: threading.currentThread().ident returns same value even in different processes

As the title says, different calls to threading.currentThread().ident returns 34382823872, even in different processes.开发者_运维百科 (Using Python 3.1 & FreeBSD)

Is it FreeBSD's problem with python threads or not?


Are you testing this in the REPL? Or in an actual program? I ask because when I ran the below using the REPL, I got the same result, but when I ran the same as a script, the threads had different identifiers.

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 output:

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

Script output:

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

I suspect this is expected behavior; the below is from the threading docs:

The ‘thread identifier’ of this thread or None if the thread has not been started. This is a nonzero integer. See the thread.get_ident() function. Thread identifiers may be recycled when a thread exits and another thread is created.

Furthermore, I modified thid in the REPL like this:

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

And when I called t2.start() within 10 seconds of calling t1.start(), they had different ids, but if I waited more than 10 seconds, they had the same id.

If you want to distinguish between different threads, just call id(threading.currentThread()). Python ids are always distinct.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜