Skip to main content

Persistent results is a Python class that ensures the results of tests will be available even if interruptions during the tests occur.

Project description

Persistent results

Package version Package version

Persistent results is a Python class that ensures the results will be available even if interruptions occur.

Installation:

pip install pers

Usage:

Example 1

If the code below breaks for some reason (let's say the computer shuts down because of a power outage or some exception), you can restart it to continue from the step it finished.

from pers import PersistentResults
import pandas as pd # pandas is not required

results = PersistentResults(
    'test.pickle', # filename for result caching
    interval=1,    # how often dump the results
    tmpfilename='~test.pickle' # tmp cache file (optional)
)

fun = lambda x, y, a, b: x**2 + y
for x in range(10):
    for y in range(11):
        results.append(fun, x, y, a=x, b=y)
results.save()

print(pd.DataFrame(results.data))

Output:

{'result': 66, 'x': 8, 'y': 2, 'a': 8, 'b': 2}
110
|     |   result |   x |   y |   a |   b |
|----:|---------:|----:|----:|----:|----:|
|   0 |        0 |   0 |   0 |   0 |   0 |
|   1 |        1 |   0 |   1 |   0 |   1 |
|   2 |        2 |   0 |   2 |   0 |   2 |
[..]
| 107 |       89 |   9 |   8 |   9 |   8 |
| 108 |       90 |   9 |   9 |   9 |   9 |
| 109 |       91 |   9 |  10 |   9 |  10 |

Example 2

from pers import PersistentResults
import pandas as pd

results = PersistentResults(
    'test2.pickle',
    interval=1,
    result_prefix='' # we do not want a prefix _result_
)

def fun(x, y, a, b):
    print(f'x: {x}, y:{y}')
    return {         # yes, we can return dictionary
        'out': x**2 + y,
        'x': x,      # yes, we can return input in dict
        'a': a,
    }

try:
    for x in range(10):
        for y in range(11):
            results.append(fun, x=x, y=y, a=x, b=y)
            if x == 5 and y ==5: # simulate reboot
                raise Exception('Unexpected reboot...')
except:
    pass

# RERUN the tests
# will skip already processed elements

for x in range(10):
    for y in range(11):
        results.append(fun, x=x, y=y, a=x, b=y)
results.save()

print(pd.DataFrame(results.data).to_markdown())
x: 0, y:0
x: 0, y:1
[..]
x: 5, y:4
x: 5, y:5
Unexpected reboot...

x: 5, y:6
x: 5, y:7
[..]
x: 9, y:9
x: 9, y:10

|     |   out |   x |   a |   y |   b |
|----:|------:|----:|----:|----:|----:|
|   0 |     0 |   0 |   0 |   0 |   0 |
|   1 |     1 |   0 |   0 |   1 |   1 |
|   2 |     2 |   0 |   0 |   2 |   2 |
[..]
| 107 |    89 |   9 |   9 |   8 |   8 |
| 108 |    90 |   9 |   9 |   9 |   9 |
| 109 |    91 |   9 |   9 |  10 |  10 |

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

pers-0.2.2.tar.gz (17.9 kB view details)

Uploaded Source

Built Distribution

pers-0.2.2-py2.py3-none-any.whl (17.0 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file pers-0.2.2.tar.gz.

File metadata

  • Download URL: pers-0.2.2.tar.gz
  • Upload date:
  • Size: 17.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.10

File hashes

Hashes for pers-0.2.2.tar.gz
Algorithm Hash digest
SHA256 c2d295e859524227e25dee94bd199bd128a352c0d2d3fa27b2582bbcb272f367
MD5 23ef433403f10887f5764684bf61e569
BLAKE2b-256 9cb2706f57d751da68f4928e85d843962649577300fa10fa52cbb687b6e5a630

See more details on using hashes here.

File details

Details for the file pers-0.2.2-py2.py3-none-any.whl.

File metadata

  • Download URL: pers-0.2.2-py2.py3-none-any.whl
  • Upload date:
  • Size: 17.0 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.10

File hashes

Hashes for pers-0.2.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 e255bb1c6143ce1586d15e96ebee36d4239d95436642582053cdf164697d4372
MD5 26b99266f02ac9a89177f6312f95e84e
BLAKE2b-256 40bd73fa3a4cdd4d18ec1809db2f561f5449ab1531f474c644b802a226b99966

See more details on using hashes here.

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