Get timer ticks in Python

后端 未结 6 724
一整个雨季
一整个雨季 2020-12-05 01:46

I\'m just trying to time a piece of code. The pseudocode looks like:

start = get_ticks()
do_long_code()
print \"It took \" + (get_ticks() - start) + \" secon         


        
6条回答
  •  醉酒成梦
    2020-12-05 02:26

    Here's a solution that I started using recently:

    class Timer:
        def __enter__(self):
            self.begin = now()
    
        def __exit__(self, type, value, traceback):
            print(format_delta(self.begin, now()))
    

    You use it like this (You need at least Python 2.5):

    with Timer():
        do_long_code()
    

    When your code finishes, Timer automatically prints out the run time. Sweet! If I'm trying to quickly bench something in the Python Interpreter, this is the easiest way to go.

    And here's a sample implementation of 'now' and 'format_delta', though feel free to use your preferred timing and formatting method.

    import datetime
    
    def now():
        return datetime.datetime.now()
    
    # Prints one of the following formats*:
    # 1.58 days
    # 2.98 hours
    # 9.28 minutes # Not actually added yet, oops.
    # 5.60 seconds
    # 790 milliseconds
    # *Except I prefer abbreviated formats, so I print d,h,m,s, or ms. 
    def format_delta(start,end):
    
        # Time in microseconds
        one_day = 86400000000
        one_hour = 3600000000
        one_second = 1000000
        one_millisecond = 1000
    
        delta = end - start
    
        build_time_us = delta.microseconds + delta.seconds * one_second + delta.days * one_day
    
        days = 0
        while build_time_us > one_day:
            build_time_us -= one_day
            days += 1
    
        if days > 0:
            time_str = "%.2fd" % ( days + build_time_us / float(one_day) )
        else:
            hours = 0
            while build_time_us > one_hour:
                build_time_us -= one_hour
                hours += 1
            if hours > 0:
                time_str = "%.2fh" % ( hours + build_time_us / float(one_hour) )
            else:
                seconds = 0
                while build_time_us > one_second:
                    build_time_us -= one_second
                    seconds += 1
                if seconds > 0:
                    time_str = "%.2fs" % ( seconds + build_time_us / float(one_second) )
                else:
                    ms = 0
                    while build_time_us > one_millisecond:
                        build_time_us -= one_millisecond
                        ms += 1
                    time_str = "%.2fms" % ( ms + build_time_us / float(one_millisecond) )
        return time_str
    

    Please let me know if you have a preferred formatting method, or if there's an easier way to do all of this!

提交回复
热议问题