Tengo un programa Python de subprocesos múltiples y una función de utilidad writeLog(message)
que escribe una marca de tiempo seguida del mensaje. Desafortunadamente, el archivo de registro resultante no indica qué hilo está generando qué mensaje.
Me gustaría writeLog()
poder agregar algo al mensaje para identificar qué hilo lo está llamando. Obviamente, podría hacer que los hilos pasen esta información, pero eso sería mucho más trabajo. ¿Hay algún hilo equivalente al os.getpid()
que podría usar?
python
multithreading
python-multithreading
python-logging
Charles Anderson
fuente
fuente
threading.currentThread()
(camelCase, no camel_case) a partir de la versión 2.5.threading.current_thread().ident
es apropiadoNone
. Probablemente tenga sentido usarlothread.get_ident()
en Python 2 ythreading.current_thread().ident
Python 3.thread.get_ident()
(threading.get_ident()
se agregó en Python 3.3 - siga los enlaces a la documentación).Con el módulo de registro , puede agregar automáticamente el identificador de subproceso actual en cada entrada de registro. Solo use una de estas claves de mapeo LogRecord en su cadena de formato de registrador:
y configure su controlador predeterminado con él:
fuente
<concurrent.futures.thread.ThreadPoolExecutor object at 0x7f00f882a438>_2
esto como un nombre de hilo. ¿Es ese el número de mi hilo que invocóLa
thread.get_ident()
función devuelve un entero largo en Linux. No es realmente una identificación de hilo.Utilizo este método para obtener realmente la identificación del hilo en Linux:
fuente
Esta funcionalidad ahora es compatible con Python 3.8+ :)
https://github.com/python/cpython/commit/4959c33d2555b89b494c678d99be81a65ee864b0
https://github.com/python/cpython/pull/11993
fuente
Vi ejemplos de ID de hilo como este:
La lista de documentos del módulo de subprocesos
name
también:fuente
Puede obtener la identificación del hilo actual en ejecución. El ident podría ser reutilizado para otros hilos, si el hilo actual termina.
Cuando crea una instancia de Thread, se le da un nombre implícito al thread, que es el patrón: Thread-number
El nombre no tiene significado y el nombre no tiene que ser único. La identificación de todos los hilos en ejecución es única.
La función threading.current_thread () devuelve el hilo actual en ejecución. Este objeto contiene toda la información del hilo.
fuente
Creé múltiples hilos en Python, imprimí los objetos de hilo e imprimí la identificación usando la
ident
variable. Veo que todos los identificadores son iguales:fuente
ident
dicen los documentos :Thread identifiers may be recycled when a thread exits and another thread is created.
docs.python.org/2/library/threading.html#threading.Thread.identDe manera similar a @brucexin, necesitaba obtener un identificador de subproceso a nivel del sistema operativo (que! =
thread.get_ident()
) Y usar algo como a continuación para no depender de números particulares y ser solo amd64:y
Sin embargo, esto depende de Cython.
fuente
invalid syntax
puntero después de laextern
palabra clave. Se me escapa algo. ¿Es importante que el código esté en un módulo separado y tenga la extensión pyx? ¿O es esto una cosa de (re) compilación?.pyx
archivo. Para "pitón puro", probablemente también se podría hacer algo similar con ctypes.