Minimalist measurement of python code time
Project description
# timy






Minimalist measurement of python code time
> **timy** comes with a different idea of the built-in module [timeit](https://docs.python.org/2.7/library/timeit.html). It adds flexibility and different ways of measuring code time, using simple context managers and function decorators.
## Installing
```
pip install timy
```
## Usage
### Decorating a function
Let's say you have a `calculate` function and you want to keep track of its execution time
```python
import timy
@timy.timer()
def calculate(n, r):
"""
Divide, multiply and sum 'n' to every number in range 'r'
returning the result list
"""
return [i / n * n + n for i in range(r)]
```
Whenever you call that function, the execution time will be tracked
```python
calculate(5, 10000000)
>> Timy executed (calculate) for 1 time(s) in 1.529540 seconds
>> Timy best time was 1.529540 seconds
```
Changing the **ident** and adding **loops** to the execution
```python
import timy
@timy.timer(ident='My calculation', loops=10)
def calculate(n, r):
return [i / n * n + n for i in range(r)]
calculate(5, 10000000)
>> My calculation executed (calculate) for 10 time(s) in 15.165313 seconds
>> My calculation best time was 1.414186 seconds
```
### Tracking **specific points** along your code
The `with` statement can also be used to measure code time
> Named tracking points can be added with the `track` function
```python
import timy
with timy.Timer() as timer:
N = 10000000
for i in range(N):
if i == N/2:
timer.track('Half way')
>> Timy (Half way) 0.557577 seconds
>> Timy 0.988087 seconds
```
Another usage of tracking in a prime factors function
```python
def prime_factors(n):
with timy.Timer('Factors') as timer:
i = 2
factors = []
def add_factor(n):
factors.append(n)
timer.track('Found a factor')
while i * i <= n:
if n % i == 0:
add_factor(i)
n //= i
else:
i += 1
return factors + [n]
factors = prime_factors(600851475143)
print(factors)
>> Factors (Found a factor) 0.000017 seconds
>> Factors (Found a factor) 0.000376 seconds
>> Factors (Found a factor) 0.001547 seconds
>> Factors 0.001754 seconds
>> [71, 839, 1471, 6857]
```
### Configuring
#### Importing timy config
```python
from timy.settings import timy_config
```
#### Enable or disable timy trackings
You can enable or disable timy trackings with the `tracking` value.
> The default value of `tracking` is `True`
```python
timy_config.tracking = False
```
#### Changing the way timy outputs information
You can choose between print or logging for all timy outputs by setting the
value of `tracking_mode`.
> The default value of `tracking_mode` is `TrackingMode.PRINTING`.
```python
from timy.settings import (
timy_config,
TrackingMode
)
timy_config.tracking_mode = TrackingMode.LOGGING
```
timy logs at the INFO level, which is not printed or stored by default. To
configure the logging system to print all INFO messages do
```
import logging
logging.basicConfig(level=logging.INFO)
```
or to configure the logging system to print only timy's INFO messages do
```
import logging
logging.basicConfig()
logging.getLogger('timy').level=logging.INFO
```
## Contribute
Contributions are **always** welcome, but keep it simple and small.
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details
## Changelog
### v 0.4.0 (September 23, 2017)
- Drops py2 support and adds 100% coverage with CI integration
### v 0.3.3 (April 19, 2017)
- Adds an optional argument `include_sleeptime` to count time elapsed including sleep time (`include_sleeptime=True`) and excluding sleep time (`include_sleeptime=False`)






Minimalist measurement of python code time
> **timy** comes with a different idea of the built-in module [timeit](https://docs.python.org/2.7/library/timeit.html). It adds flexibility and different ways of measuring code time, using simple context managers and function decorators.
## Installing
```
pip install timy
```
## Usage
### Decorating a function
Let's say you have a `calculate` function and you want to keep track of its execution time
```python
import timy
@timy.timer()
def calculate(n, r):
"""
Divide, multiply and sum 'n' to every number in range 'r'
returning the result list
"""
return [i / n * n + n for i in range(r)]
```
Whenever you call that function, the execution time will be tracked
```python
calculate(5, 10000000)
>> Timy executed (calculate) for 1 time(s) in 1.529540 seconds
>> Timy best time was 1.529540 seconds
```
Changing the **ident** and adding **loops** to the execution
```python
import timy
@timy.timer(ident='My calculation', loops=10)
def calculate(n, r):
return [i / n * n + n for i in range(r)]
calculate(5, 10000000)
>> My calculation executed (calculate) for 10 time(s) in 15.165313 seconds
>> My calculation best time was 1.414186 seconds
```
### Tracking **specific points** along your code
The `with` statement can also be used to measure code time
> Named tracking points can be added with the `track` function
```python
import timy
with timy.Timer() as timer:
N = 10000000
for i in range(N):
if i == N/2:
timer.track('Half way')
>> Timy (Half way) 0.557577 seconds
>> Timy 0.988087 seconds
```
Another usage of tracking in a prime factors function
```python
def prime_factors(n):
with timy.Timer('Factors') as timer:
i = 2
factors = []
def add_factor(n):
factors.append(n)
timer.track('Found a factor')
while i * i <= n:
if n % i == 0:
add_factor(i)
n //= i
else:
i += 1
return factors + [n]
factors = prime_factors(600851475143)
print(factors)
>> Factors (Found a factor) 0.000017 seconds
>> Factors (Found a factor) 0.000376 seconds
>> Factors (Found a factor) 0.001547 seconds
>> Factors 0.001754 seconds
>> [71, 839, 1471, 6857]
```
### Configuring
#### Importing timy config
```python
from timy.settings import timy_config
```
#### Enable or disable timy trackings
You can enable or disable timy trackings with the `tracking` value.
> The default value of `tracking` is `True`
```python
timy_config.tracking = False
```
#### Changing the way timy outputs information
You can choose between print or logging for all timy outputs by setting the
value of `tracking_mode`.
> The default value of `tracking_mode` is `TrackingMode.PRINTING`.
```python
from timy.settings import (
timy_config,
TrackingMode
)
timy_config.tracking_mode = TrackingMode.LOGGING
```
timy logs at the INFO level, which is not printed or stored by default. To
configure the logging system to print all INFO messages do
```
import logging
logging.basicConfig(level=logging.INFO)
```
or to configure the logging system to print only timy's INFO messages do
```
import logging
logging.basicConfig()
logging.getLogger('timy').level=logging.INFO
```
## Contribute
Contributions are **always** welcome, but keep it simple and small.
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details
## Changelog
### v 0.4.0 (September 23, 2017)
- Drops py2 support and adds 100% coverage with CI integration
### v 0.3.3 (April 19, 2017)
- Adds an optional argument `include_sleeptime` to count time elapsed including sleep time (`include_sleeptime=True`) and excluding sleep time (`include_sleeptime=False`)
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
timy-0.4.1.tar.gz
(3.7 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
timy-0.4.1-py3-none-any.whl
(3.9 kB
view details)
File details
Details for the file timy-0.4.1.tar.gz.
File metadata
- Download URL: timy-0.4.1.tar.gz
- Upload date:
- Size: 3.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.0.0 requests-toolbelt/0.8.0 tqdm/4.24.0 CPython/3.6.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8b727d7e433ad6e2777b934d1ffd81e066eeb0aa349fd9ab47fce5f155d548cd
|
|
| MD5 |
7540610f1eeb59b910f18ca4c00f890a
|
|
| BLAKE2b-256 |
a01517a4c0172f3194503a79332c1c69433d8d25ade19f0c39ae97b51edd54f2
|
File details
Details for the file timy-0.4.1-py3-none-any.whl.
File metadata
- Download URL: timy-0.4.1-py3-none-any.whl
- Upload date:
- Size: 3.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.0.0 requests-toolbelt/0.8.0 tqdm/4.24.0 CPython/3.6.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
664882759b237c393e4a0dfdb260cb5ea0e14103465a5353382f66d62cfa1235
|
|
| MD5 |
d5f21ed9bc1a6257399a4412e1b95397
|
|
| BLAKE2b-256 |
b43d5be767b262917ae75d2eb92bf35169307529709bf6a7a1e9a41235676b30
|