Skip to main content

Cross-platform python module to set execution time limits (timer, timeout and iterative deepening) as decorators.

Project description

timework

PyPI Build Status Coverage Status CodeFactor PyPI - Python Version platform

Cross-platform python module to set execution time limits timer, timeout, iterative as decorators.

Install

pip install timework

Usage

import timework as tw

timework.timer

A decorator measuring the execution time.

timework.TimeError contains three parts:

  • TimeError.message string, <decorated function name>: <time used> seconds used
  • TimeError.result return values of the function being decorated
  • TimeError.detail float, time used

Notice: In @timer decorator, timeout is used to raise a Error after the decorated function finishes, but fails to finish within timeout seconds. If you want to terminate the function with a timeout limit, please use @limit.

import logging

@tw.timer(logging.warning)
def timer_demo_a():
    i = 0
    while i < 2 ** 23:
        i += 1
    return i

@tw.timer(print, detail=True)
def timer_demo_b():
    i = 0
    while i < 2 ** 24:
        i += 1
    return i

@tw.timer(timeout=1)
def timer_demo_c():
    i = 0
    while i < 2 ** 25:
        i += 1
    return i
a = timer_demo_a()
b = timer_demo_b()

try:
    c = timer_demo_c()
except tw.TimeError as e:
    print('error:', e.message)
    c = e.result

print(a, b, c)
WARNING:root:timer_demo_a: 0.496672 seconds used
START:  Tue Feb 18 15:06:45 2020
FINISH: Tue Feb 18 15:06:46 2020
timer_demo_b: 0.989352 seconds used
error: timer_demo_c: 1.9817 seconds used
8388608 16777216 33554432

timework.limit

A decorator limiting the execution time.

timework.TimeError only contains:

  • TimeError.message string, <decorated function name>: <timeout> seconds exceeded
  • TimeError.result None, unused
  • TimeError.detail None, unused
@tw.limit(3)
def limit_demo(m):
    i = 0
    while i < 2 ** m:
        i += 1
    return i
try:
    s = limit_demo(4)
except tw.TimeError as e:
    print(e)
else:
    print('result:', s)

try:
    s = limit_demo(30)
except tw.TimeError as e:
    print(e)
else:
    print('result:', s)
result: 16
limit_demo: 3 seconds exceeded

timework.iterative

A decorator used to process iterative deepening.

timework.TimeError contains three parts:

  • TimeError.message string, <decorated function name>.iterative_deepening: <timeout> seconds exceeded
  • TimeError.result return values at current level of the iterative deepening search
  • TimeError.detail collections.deque, results of the previous levels

Notice: Please use keyword arguments when calling the function that is being decorated. Make sure the max-depth variable of the inner function is given at key(key='max_depth' by default) and whose value should be the maximum search-depth(integer).

@tw.iterative(3)
def iterative_demo_a(max_depth):
    i = 0
    while i < 2 ** max_depth:
        i += 1
    return max_depth, i

@tw.iterative(3, history=5, key='depth')
def iterative_demo_b(depth):
    i = 0
    while i < 2 ** depth:
        i += 1
    return depth
try:
    s = iterative_demo_a(max_depth=10)
except tw.TimeError as e:
    print(e.message)
    print(e.result, e.detail)
else:
    print('result:', s)

try:
    s = iterative_demo_a(max_depth=25)
except tw.TimeError as e:
    print(e.message)
    print(e.result, e.detail)
else:
    print('result:', s)

try:
    s = iterative_demo_b(depth=25)
except tw.TimeError as e:
    print(e.message)
    print(e.result, e.detail)
else:
    print('result:', s)
result: (10, 1024)
iterative_demo_a.iterative_deepening: 3 seconds exceeded
(20, 1048576) deque([(20, 1048576)], maxlen=1)
iterative_demo_b.iterative_deepening: 3 seconds exceeded
20 deque([16, 17, 18, 19, 20], maxlen=5)

You can read docstrings for more details.

License

MIT License © bugstop

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

timework-0.2.8.tar.gz (6.3 kB view hashes)

Uploaded source

Built Distribution

timework-0.2.8-py3-none-any.whl (7.3 kB view hashes)

Uploaded py3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page