Python & FreeBSD: threading.currentThread (). Ident возвращает одно и то же значение даже в разных процессах - PullRequest
3 голосов
/ 16 апреля 2011

Как видно из заголовка, различные вызовы threading.currentThread().ident возвращают 34382823872, даже в разных процессах. (Использование Python 3.1 и FreeBSD)

Это проблема FreeBSD с потоками Python или нет?

1 Ответ

4 голосов
/ 16 апреля 2011

Вы тестируете это в 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 (). Идентификаторы потока могут быть переработаны при выходе из потока и создании другого потока.

Кроме того, я изменил thid в REPL следующим образом:

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

И когда я звонил t2.start() в течение 10 секунд после звонка t1.start(), у них были разные идентификаторы, но если я ждал более 10 секунд, у них был один и тот же идентификатор.

Если вы хотите различать разные потоки, просто наберите id(threading.currentThread()).Идентификаторы Python всегда различны.

...