Skip to main content

Script Timer v4

This is a simple script timer class. It is used to time various sections of code, with minimal additional code It has use cases such as :

  • Testing which section of code is taking more time, in order to optimise time complexity
  • Logging time taken by total script and its subsections
  • Keeping track of which subsection is running at the moment, within the script (for cases where scripts take minutes or more)

Features

  • Time different sections (and their subsections) of code with minimal code
  • Infinite subsection levels possible
  • Customisable logging
  • Live log
  • Starting next section automatically stops previous section
  • Automatic adjustment of time unit i.e. whether it should be showed in seconds, minutes.... upto days unit

Usage

This is a object oriented approach. This allows multiple timers to be made in the same script First, we have to import the script and create a script timer object

import ScriptTimer as st
timer = st.Timer()

This object will be used for all timing purposes

Script timer object functions :

0. Constructor( verbose = 0)

  • verbose : has different levels of logging while starting/ending a subsection. It can take the following values :
    • 0 : No logging while start() or end() are called (DEFAULT)
    • 1 : Print only section names when their respective start()/end() are called
    • 2 : Print section names with time the section started
    • 3 : Print section name, its start date and start time

1. start( section = '0', label = 'Start'):

This function starts the script timer/any subsection of the script

Arguments :

  • section : Single string containing numbers seperated by fullstop. Represents the section of code being tested
  • label : Name given to the section of the code. Useful in case of many/complicated sections If no label is given, then a default label of '-No Label-' is given

Examples :

# 1. start overall script timer (optional)
timer.start()

# 2. Typical command to start a particular section
timer.start('1', 'Data Cleaning')

# 3. starting a new section automatically stops the previous running section 
# (in this case, section 1 (Data Cleaning) is ended automatically before starting section 2 ( Data Preprocessing))
timer.start('2', 'Data Preporcessing')

2. end( section = '0', label = 'Start'):

Ends a particular subsection, or even the entire timer

Arguments

  • section : Single string containing numbers seperated by fullstop. Represents the section of code being tested

Examples :

# 1. Typical command to start and end a particular section of code
timer.start('1', 'Data Cleaning')
#
# your code
#
timer.end('1')


# 2. end whole timer
timer.end()

3. show( level = 1000, verbose = 0 ):

This function is used to print the various subsections and their respective time taken

Arguments

  • level : The inner levels of sections upto which time-taken must be shown
  • verbose : Levels of output to be shown. It can take the values of :
    • 0 :
      • Label : label of the section
      • Time_Taken : time taken by the section
      • And All above columns
    • 1 :
      • Chronology : order in which the sections were run in the script
      • And All above columns
    • 2 :
      • Start_Time
      • End_Time
      • And All above columns
    • 3 :
      • Start_Date
      • End_Date
      • And All above columns
    • 4 :
      • Raw_Time : time taken by section in Epoch format
      • Raw_Start: start time of section in Epoch format
      • Raw_End : end time of section in Epoch format
      • And All above columns

4. reset()

resets the whole timer

5. get_table()

Returns pandas dataframe representing all subsections with various attributes (described in show())

6. save( filename = 'Timer_logs' )

saves the timer pandas dataframe into a csv file with user-given filename in the python pwd path

Example

Code :

import ScriptTimer
import time

# Initialising object with high verbose level
st = ScriptTimer.Timer(verbose = 2)

# Starting timer without any section will start the overall timer
# This is not necessary at all, but shown here for reference purposes
st.start()
time.sleep(1)

# Starting a particular section
st.start('1', 'Data Fetching')
time.sleep(1)

# Starting next section will automatically stop previous section
st.start('2', 'Data Augmentation')
time.sleep(1)

# Starting a subsection
st.start('2.1', 'Data Cleaning')
time.sleep(1)

# restarting the same section
st.start('2.1', 'Data Cleaning')
time.sleep(1)

st.start('2.2', 'Data Preprocessing')
time.sleep(1)

# Ending a section will end all its subsections as well
st.end('2')
time.sleep(1)

# Creating a subsection without creating it's parent section possible.
# For eg. Here, section 3 had not been created, but 3.1 is being started
st.start('3.1', 'Hypothesis Testing')
time.sleep(1)

# Ending the whole timer
st.end()

# Showing the logs of timer object
st.show()

# Showing logs of only top-level sections
print('\nShowing logs of only top-level sections)
st.show(level = 1)

# Showing logs at a high verbose level
print('\nShowing logs at a high verbose level)
st.show(verbose = 3)

Output :

Started : 1	 Data Fetching	 at 16:57:00
Ended   : 1	 Data Fetching	 at 16:57:01
Started : 2	 Data Augmentation	 at 16:57:01
Started : 2.1	 Data Cleaning	 at 16:57:02
Started : 2.1	 Data Cleaning	 at 16:57:03
Ended   : 2.1	 Data Cleaning	 at 16:57:04
Started : 2.2	 Data Preprocessing	 at 16:57:04
Ended   : 2.2	 Data Preprocessing	 at 16:57:05
Started : 3	 -No Label-	 at 16:57:06
Started : 3.1	 Hypothesis Testing	 at 16:57:06
Ended   : 3.1	 Hypothesis Testing	 at 16:57:07
                      Label   Time_Taken
Section
0             Entire Script  8.0252 Secs
1             Data Fetching  1.0017 Secs
2         Data Augmentation  4.0147 Secs
2.1           Data Cleaning  1.0051 Secs
2.2      Data Preprocessing  1.0038 Secs
3                -No Label-  1.0031 Secs
3.1      Hypothesis Testing  1.0029 Secs

Showing logs of only top-level sections
                     Label   Time_Taken
Section
0            Entire Script  8.0252 Secs
1            Data Fetching  1.0017 Secs
2        Data Augmentation  4.0147 Secs
3               -No Label-  1.0031 Secs

Showing logs at a high verbose level
                      Label   Time_Taken  Chronology  Start_Date Start_Time    End_Date  End_Time
Section
0             Entire Script  8.0252 Secs         1.0  18-09-2021   16:56:59  18-09-2021  16:57:07
1             Data Fetching  1.0017 Secs         2.0  18-09-2021   16:57:00  18-09-2021  16:57:01
2         Data Augmentation  4.0147 Secs         3.0  18-09-2021   16:57:01  18-09-2021  16:57:05
2.1           Data Cleaning  1.0051 Secs         4.0  18-09-2021   16:57:03  18-09-2021  16:57:04
2.2      Data Preprocessing  1.0038 Secs         5.0  18-09-2021   16:57:04  18-09-2021  16:57:05
3                -No Label-  1.0031 Secs         6.0  18-09-2021   16:57:06  18-09-2021  16:57:07
3.1      Hypothesis Testing  1.0029 Secs         7.0  18-09-2021   16:57:06  18-09-2021  16:57:07

Metadata

Release files for scriptTimer 0.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for scriptTimer 0.0.2
File Size Uploaded Provenance
scriptTimer-0.0.2.tar.gz 8.4 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for scriptTimer 0.0.2
File Interpreter ABI Platform
scriptTimer-0.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 16.2 kB

Release files / scriptTimer-0.0.2.tar.gz

Download URL scriptTimer-0.0.2.tar.gz
Size 8.4 kB
Tags Source
SHA-256 checksum
How to use checksums
e7ad235d391d904196bd9e8b2cc38124098df5b30dd6331d1116dc78f9f0cd28
BLAKE2b-256 checksum
How to use checksums
c6d7610f5706e7b2c98d1062cc077a2be299c3762e299f269cb375537577649d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

Release files / scriptTimer-0.0.2-py3-none-any.whl

Download URL scriptTimer-0.0.2-py3-none-any.whl
Size 7.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
60162aa2b0d953f75d13f1daf398b34fa3762443f3e3c50fc760f2f2d2b1a130
BLAKE2b-256 checksum
How to use checksums
0a934962489e4a3290bc1e9352b24d4b8dee68bf9d712daf98ec86841eb5c113
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

Security for scriptTimer 0.0.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.0.2 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page