Cómo encontrar el tiempo de ejecución de un hilo en Python

Tengo un servidor SMTP multi-hilo. Cada hilo cuida de un cliente. Necesito establecer un valor de tiempo de espera de 10 segundos en cada subproceso del servidor para terminar a los clientes inactivos o que se comportan mal.
He usado time.time() , para encontrar la hora de inicio y la hora de mi punto de control y la diferencia da el tiempo de ejecución. Pero creo que le da al sistema la hora y no la hora en que se ejecutó este hilo.
¿Hay una API de temporizador local Thread en Python?

  import threading stop = 0 def hello(): stop = 1 t=threading.Timer(10,hello) t.start() while stop != 1: print stop print "stop changed" 

Esto imprime 0 (parada inicial) en un bucle y no sale del bucle while.

En la documentación de python no se menciona la “sincronización de hilos”. O bien los relojes son para todo el proceso o para todo el sistema. En particular, time.clock mide el tiempo de proceso mientras time.time devuelve la hora del sistema.

En python3.3, la API de tiempos se revisó y mejoró, pero aún así, no puedo ver ningún temporizador que devuelva el tiempo de proceso tomado por un solo hilo.

También tenga en cuenta que incluso si es posible no es nada fácil escribir un temporizador de este tipo. Los temporizadores son específicos del sistema operativo, por lo que tendría que escribir una versión diferente del módulo para cada sistema operativo. Si desea crear un perfil de una acción específica, simplemente inicie sin hilos. Cuando se sincroniza, el tiempo se ejecuta como se espera o es mucho más lento debido al sistema operativo, en cuyo caso no puede hacer nada al respecto (al menos, si no desea escribir un parche que “corrija”) el GIL o lo elimina de forma segura).

El valor de parada de la función hello es local, no global.

Agregue lo siguiente:

 def hello(): global stop stop = 1 

Python ha progresado en los 6 años desde que se hizo esta pregunta, y en la versión 3.3 introdujo una herramienta para exactamente lo que se estaba preguntando aquí:

time.clock_gettime(time.CLOCK_THREAD_CPUTIME_ID)

Python 3.7 introdujo además un time.clock_gettime_ns análogo.

Los documentos detallados son exactamente los que usted esperaría, pero la función es bastante sencilla de inmediato.

Estoy publicando un código de muestra que puede medir el tiempo de ejecución del subproceso, puede modificar el código para utilizarlo con su función.

  import time import threading def hello(): x = 0 while x < 100000000: pass x += 1 start = time.clock() t = threading.Thread(target = hello, args = ()) t.start() t.join() end = time.clock() print "The time was {}".format(end - start) 

En mi sistema, dio un tiempo de 8.34 segundos.