How do I get time of a Python program's execution?

后端 未结 30 1640
甜味超标
甜味超标 2020-11-22 02:20

I have a command line program in Python that takes a while to finish. I want to know the exact time it takes to finish running.

I\'ve looked at the timeit

相关标签:
30条回答
  • 2020-11-22 02:59

    time.clock()

    Deprecated since version 3.3: The behavior of this function depends on the platform: use perf_counter() or process_time() instead, depending on your requirements, to have a well-defined behavior.

    time.perf_counter()

    Return the value (in fractional seconds) of a performance counter, i.e. a clock with the highest available resolution to measure a short duration. It does include time elapsed during sleep and is system-wide.

    time.process_time()

    Return the value (in fractional seconds) of the sum of the system and user CPU time of the current process. It does not include time elapsed during sleep.

    start = time.process_time()
    ... do something
    elapsed = (time.process_time() - start)
    
    0 讨论(0)
  • 2020-11-22 02:59

    I liked Paul McGuire's answer too and came up with a context manager form which suited my needs more.

    import datetime as dt
    import timeit
    
    class TimingManager(object):
        """Context Manager used with the statement 'with' to time some execution.
    
        Example:
    
        with TimingManager() as t:
           # Code to time
        """
    
        clock = timeit.default_timer
    
        def __enter__(self):
            """
            """
            self.start = self.clock()
            self.log('\n=> Start Timing: {}')
    
            return self
    
        def __exit__(self, exc_type, exc_val, exc_tb):
            """
            """
            self.endlog()
    
            return False
    
        def log(self, s, elapsed=None):
            """Log current time and elapsed time if present.
            :param s: Text to display, use '{}' to format the text with
                the current time.
            :param elapsed: Elapsed time to display. Dafault: None, no display.
            """
            print s.format(self._secondsToStr(self.clock()))
    
            if(elapsed is not None):
                print 'Elapsed time: {}\n'.format(elapsed)
    
        def endlog(self):
            """Log time for the end of execution with elapsed time.
            """
            self.log('=> End Timing: {}', self.now())
    
        def now(self):
            """Return current elapsed time as hh:mm:ss string.
            :return: String.
            """
            return str(dt.timedelta(seconds = self.clock() - self.start))
    
        def _secondsToStr(self, sec):
            """Convert timestamp to h:mm:ss string.
            :param sec: Timestamp.
            """
            return str(dt.datetime.fromtimestamp(sec))
    
    0 讨论(0)
  • 2020-11-22 03:00

    You can use the Python profiler cProfile to measure CPU time and additionally how much time is spent inside each function and how many times each function is called. This is very useful if you want to improve performance of your script without knowing where to start. This answer to another Stack Overflow question is pretty good. It's always good to have a look in the documentation too.

    Here's an example how to profile a script using cProfile from a command line:

    $ python -m cProfile euler048.py
    
    1007 function calls in 0.061 CPU seconds
    
    Ordered by: standard name
    ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    0.061    0.061 <string>:1(<module>)
     1000    0.051    0.000    0.051    0.000 euler048.py:2(<lambda>)
        1    0.005    0.005    0.061    0.061 euler048.py:2(<module>)
        1    0.000    0.000    0.061    0.061 {execfile}
        1    0.002    0.002    0.053    0.053 {map}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler objects}
        1    0.000    0.000    0.000    0.000 {range}
        1    0.003    0.003    0.003    0.003 {sum}
    
    0 讨论(0)
  • 2020-11-22 03:01

    I used a very simple function to time a part of code execution:

    import time
    def timing():
        start_time = time.time()
        return lambda x: print("[{:.2f}s] {}".format(time.time() - start_time, x))
    

    And to use it, just call it before the code to measure to retrieve function timing, and then call the function after the code with comments. The time will appear in front of the comments. For example:

    t = timing()
    train = pd.read_csv('train.csv',
                            dtype={
                                'id': str,
                                'vendor_id': str,
                                'pickup_datetime': str,
                                'dropoff_datetime': str,
                                'passenger_count': int,
                                'pickup_longitude': np.float64,
                                'pickup_latitude': np.float64,
                                'dropoff_longitude': np.float64,
                                'dropoff_latitude': np.float64,
                                'store_and_fwd_flag': str,
                                'trip_duration': int,
                            },
                            parse_dates = ['pickup_datetime', 'dropoff_datetime'],
                       )
    t("Loaded {} rows data from 'train'".format(len(train)))
    

    Then the output will look like this:

    [9.35s] Loaded 1458644 rows data from 'train'
    
    0 讨论(0)
  • 2020-11-22 03:01

    Timeit is a class in Python used to calculate the execution time of small blocks of code.

    Default_timer is a method in this class which is used to measure the wall clock timing, not CPU execution time. Thus other process execution might interfere with this. Thus it is useful for small blocks of code.

    A sample of the code is as follows:

    from timeit import default_timer as timer
    
    start= timer()
    
    # Some logic
    
    end = timer()
    
    print("Time taken:", end-start)
    
    0 讨论(0)
  • 2020-11-22 03:01

    You do this simply in Python. There is no need to make it complicated.

    import time
    
    start = time.localtime()
    end = time.localtime()
    """Total execution time in minutes$ """
    print(end.tm_min - start.tm_min)
    """Total execution time in seconds$ """
    print(end.tm_sec - start.tm_sec)
    
    0 讨论(0)
提交回复
热议问题