Git Product home page Git Product logo

swpy's Introduction

swpy: A simple, yet useful stopwatch library for python

PyPI - Python Version PyPI CircleCI codecov PyPI - License

Requirements

  • Python 3.6+

Install

Just use pip to install.

pip install swpy

Usage

Basic Usage

Import Timer class from swpy, and use with statement to capsule the block where you want timing.

from swpy import Timer
from time import sleep

with Timer():
    sleep(1)

Or use start() and stop() function to controll the timer.

t = Timer()
t.start()
sleep(1)
t.stop()

And the output will look like below:

[timer-1557406243.3309178] started.
[timer-1557406243.3309178] finish time: 1.00 sec.

Features

Name the timer

You can name the timer to make it easy to recognize.

with Timer(name='test timer'):
    sleep(1)

Now the timer is renamed to test timer !

[test timer] started.
[test timer] finish time: 1.00 sec.

Lap time and Split time

There are two types to measuring time without stoping: lap time and split time. The figure below may help you to understand the differences.

split_lap_time

We prepared split and lap functions for this kind of usage. The examples are below.

# measure split time
with Timer('timer') as t:
    sleep(1)
    t.split()
    sleep(1)
    t.split()
    sleep(1)
    t.split()
# outptus
[timer] started.
[timer] split time:  1.00 sec.
[timer] split time:  2.01 sec.
[timer] split time:  3.01 sec.
[timer] finish time: 3.01 sec.
# measure lap time
with Timer('timer') as t:
    sleep(1)
    t.lap()
    sleep(1)
    t.lap()
    sleep(1)
    t.lap()
# outputs
[timer] started.
[timer] lap time:    1.00 sec.
[timer] lap time:    1.01 sec.
[timer] lap time:    1.00 sec.
[timer] finish time: 3.01 sec.

And you can name your lap/split time in the case of measuring several tasks in a single run as below.

with Timer('task timer') as t:
    task1()
    t.lap('task1')
    task2()
    t.lap('task2')
# outputs
[task timer] started.
[task timer] [task1] lap time:    3.69 sec.
[task timer] [task2] lap time:    4.21 sec.
[task timer] finish time: 7.91 sec.

Use your own logger

You can use your own logger instead of the default print.

from logzero import logger
import logging

with Timer(name='test timer', logger=logger, level=logging.DEBUG):
    sleep(1)

It will output using logger.

[D 190510 14:41:59 swpy:15] [test timer] started.
[D 190510 14:42:00 swpy:15] [test timer] finish time: 1.01 sec.

Define your own callback

Sometimes, we want to do something after the job has done like notifying the result to slack, executing the next process and so on. Callback feature will help you to do those.

# define a slack notification function
import requests, json
def send_slack(msg):
    requests.post(SLACK_URL, json.dumps({'text': msg}))

# just specify the callback argument
with Timer(name='experiment-1', callback=send_slack):
    sleep(1)

License

MIT

swpy's People

Contributors

peinan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

swpy's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.