AttributeError: module time has no attribute clock in Python 3.8

AttributeError: module time has no attribute clock in Python 3.8

From the Python 3.8 doc:

The function time.clock() has been removed, after having been deprecated since Python 3.3: use time.perf_counter() or time.process_time() instead, depending on your requirements, to have well-defined behavior. (Contributed by Matthias Bussonnier in bpo-36895.)

Check if you are using PyCrypto, if yes, uninstall it and install PyCryptodome which is a fork of PyCrypto

PyCrypto is dead as mentioned on project issue page

Since both these libraries can coexist, it could be an issue too

pip3 uninstall PyCrypto
pip3 install -U PyCryptodome

AttributeError: module time has no attribute clock in Python 3.8

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

  • On Unix, this returns the current processor time (in seconds)
  • On Windows, this returns wall-clock time (in seconds)
    # I ran this test on my dual-boot system as demonstration:
    print(time.clock()); time.sleep(10); print(time.clock())
    # Linux:    0.0382 --------------------------->  0.0384
    # Windows: 26.1224 ---------------------------> 36.1566
    

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()

Leave a Reply

Your email address will not be published.