Python's time.clock() vs. time.time() accuracy?

后端 未结 16 1408
忘掉有多难
忘掉有多难 2020-11-22 08:22

Which is better to use for timing in Python? time.clock() or time.time()? Which one provides more accuracy?

for example:

start = time.clock()
... do          


        
相关标签:
16条回答
  • 2020-11-22 08:46

    The difference is very platform-specific.

    clock() is very different on Windows than on Linux, for example.

    For the sort of examples you describe, you probably want the "timeit" module instead.

    0 讨论(0)
  • 2020-11-22 08:46

    time.clock() was removed in Python 3.8 because it had platform-dependent behavior:

    • On Unix, return the current processor time as a floating point number expressed in seconds.
    • On Windows, this function returns wall-clock seconds elapsed since the first call to this function, as a floating point number

      print(time.clock()); time.sleep(10); print(time.clock())
      # Linux  :  0.0382  0.0384   # see Processor Time
      # Windows: 26.1224 36.1566   # see Wall-Clock Time
      

    So which function to pick instead?

    • Processor Time: This is how long this specific process spends actively being executed on the CPU. Sleep, waiting for a web request, or time when only other processes are executed will not contribute to this.

      • Use time.process_time()
    • Wall-Clock Time: This refers to how much time has passed "on a clock hanging on the wall", i.e. outside real time.

      • Use time.perf_counter()

        • time.time() also measures wall-clock time but can be reset, so you could go back in time
        • time.monotonic() cannot be reset (monotonic = only goes forward) but has lower precision than time.perf_counter()
    0 讨论(0)
  • 2020-11-22 08:48

    clock() -> floating point number

    Return the CPU time or real time since the start of the process or since the first call to clock(). This has as much precision as the system records.

    time() -> floating point number

    Return the current time in seconds since the Epoch. Fractions of a second may be present if the system clock provides them.

    Usually time() is more precise, because operating systems do not store the process running time with the precision they store the system time (ie, actual time)

    0 讨论(0)
  • 2020-11-22 08:49

    Others have answered re: time.time() vs. time.clock().

    However, if you're timing the execution of a block of code for benchmarking/profiling purposes, you should take a look at the timeit module.

    0 讨论(0)
  • 2020-11-22 08:51

    Short answer: use time.clock() for timing in Python.

    On *nix systems, clock() returns the processor time as a floating point number, expressed in seconds. On Windows, it returns the seconds elapsed since the first call to this function, as a floating point number.

    time() returns the the seconds since the epoch, in UTC, as a floating point number. There is no guarantee that you will get a better precision that 1 second (even though time() returns a floating point number). Also note that if the system clock has been set back between two calls to this function, the second function call will return a lower value.

    0 讨论(0)
  • 2020-11-22 08:57

    On Unix time.clock() measures the amount of CPU time that has been used by the current process, so it's no good for measuring elapsed time from some point in the past. On Windows it will measure wall-clock seconds elapsed since the first call to the function. On either system time.time() will return seconds passed since the epoch.

    If you're writing code that's meant only for Windows, either will work (though you'll use the two differently - no subtraction is necessary for time.clock()). If this is going to run on a Unix system or you want code that is guaranteed to be portable, you will want to use time.time().

    0 讨论(0)
提交回复
热议问题