[Python-ideas] Improve os.times() resolution

Anders Hovmöller boxed at killingar.net
Sun Mar 24 09:29:42 EDT 2019


Have you checked how much overhead the two functions have? That seems like an obvious way this proposal could go south. 

> On 24 Mar 2019, at 13:15, Giampaolo Rodola' <g.rodola at gmail.com> wrote:
> 
> It turns out we could use resource.getrusage() which provides micro
> seconds (tested on Linux and macOS):
> 
>    import os, resource
>    for x in range(10000000):  # warm up
>        pass
>    for x in range(5):
>        a = os.times()
>        b = resource.getrusage(resource.RUSAGE_SELF)
>        print(a.user, a.system)
>        print(b.ru_utime, b.ru_stime)
> 
> ...it prints:
> 
>    0.39 0.01
>    0.394841 0.011963999999999999
>    0.39 0.01
>    0.394899 0.011966
>    0.39 0.01
>    0.394908 0.011966
>    0.39 0.01
>    0.394936 0.011967
>    0.39 0.01
>    0.394963 0.011968
> 
> getrusage(RUSAGE_CHILDREN) can be used to calculate "children_user"
> and "children_system". I see 2 possibilities here:
> 
> 1) doc fix, mentioning that resource.getrusage provides a better resolution
> 2) if available (it should always be as it's a POSIX standard), just
> use getrusage in Modules/posixmodule.c. It seems we can check
> availability by reusing HAVE_SYS_RESOURCE_H and HAVE_SYS_TIME_H
> definitions which are already in place.
> 
> I'm not sure what's best to do as os.* functions usually expose the
> original C function with the same name, but given that "elapsed" field
> is not part of times(2) struct and that on Windows "elapsed",
> "children_user" and "children_system" are set to 0 it appears there
> may be some space for flexibility here.
> 
> Thoughts?
> 
> -- 
> Giampaolo - http://grodola.blogspot.com
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/


More information about the Python-ideas mailing list