[pyar] Tiempo real de ejecución de un threading.Thread

Marcos Dione mdione en grulic.org.ar
Vie Ene 5 14:49:38 ART 2018


On Fri, Jan 05, 2018 at 11:38:21AM -0300, Andres Riancho wrote:
>     Tengo un software escrito en Python 2.7 que hace uso extensivo de
> threads. Como sabemos, Python solo ejecuta un thread en simultaneo,
> dejando a los otros threads en "pausa" hasta que el Linux kernel
> scheduler decide ejecutarlo nuevamente.

    No completamente cierto. Cuando un thread hace una syscall o llama a
una función implementeda en C, el GIL es soltado, así que otro thread
puede usar el CPU en ese momento.

> ```
> def worker(params):
>     start = time.time()
>     some_task(params)
>     spent = time.time() - start
>     log('some_task() took %s seconds to run' % spent)
> ```

    ahí estás calculando lo que se llama 'wall time'.

>    Como puedo hacer para obtener el tiempo real dedicado al thread,
> sin incluir el tiempo que el mismo estuvo en pausa?

    una punta va porái:

https://docs.python.org/2.7/library/os.html#os.times

    de ahí a:

https://hg.python.org/cpython/file/v2.7.13/Modules/posixmodule.c#l6430
https://linux.die.net/man/2/times

    viendo los see also:

https://linux.die.net/man/2/getrusage

RUSAGE_THREAD (since Linux 2.6.26)
    Return resource usage statistics for the calling thread. 

    te la dejo picando :)

-- 
(Not so) Random fortune:
The technology industry sees itself as in rebellion against corporate
America: not corrupt, not buttoned-up, not empty. In fact, a tech company
can be as corrupt, soulless, and empty as any corporation, but being
unprofessional helps us maintain the belief that we are somehow different
from Wall Street.
	    -- Shanley Kane


Más información sobre la lista de distribución pyar