229 votes

Comment trouver un identifiant de thread en Python

J'ai un multi-threading programme en Python, et une fonction d'utilité, writeLog(message), qui écrit un timestamp suivi par le message. Malheureusement, la résultante de fichier journal ne donne aucune indication de thread qui génère le message.

Je voudrais writeLog() pour être en mesure d'ajouter quelque chose au message d'identifier le thread qui est en l'appelant. Évidemment, je pourrais juste faire le fils de transmettre ces informations, mais ce serait beaucoup plus de travail. Est-il un fil équivalent du système d'exploitation.getpid() que je pourrais utiliser?

305voto

Nicholas Riley Points 26161

thread.get_ident() fonctionne, bien que thread soit déconseillé, ou threading.current_thread() (ou threading.currentThread() pour Python <2.6).

80voto

kraymer Points 974

À l'aide de la journalisation module, vous pouvez ajouter automatiquement le thread courant identifiant dans chaque entrée de journal. Il suffit d'utiliser une de ces LogRecord mappage des touches de l'enregistreur de chaîne de format:

%(thread)d : ID de Thread (si disponible).

%(threadName)s : nom du Thread (si disponible).

et de configurer votre gestionnaire par défaut:

logging.basicConfig(format="%(threadName)s:%(message)s")

28voto

brucexin Points 29

Les thread.get_ident() renvoient un entier long sous linux, ce n'est pas vraiment un id de thread. J'utilise cette méthode get vraiment thread id sur linux.

7voto

miku Points 63392

J'ai vu des exemples d'ID de threads comme ceci:

 class myThread(threading.Thread):
    def __init__(self, threadID, name, counter):
        self.threadID = threadID
        ...
 

Le module de threading docs répertorie également les attributs name :

 ...

A thread has a name. 
The name can be passed to the constructor, 
and read or changed through the name attribute.

...

Thread.name

A string used for identification purposes only. 
It has no semantics. Multiple threads may
be given the same name. The initial name is set by the constructor.
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X