Persistent results
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 |
Metadata
Release files for pers 0.2.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pers-0.2.2.tar.gz | 17.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pers-0.2.2-py2.py3-none-any.whl | Python 2, Python 3 | none | any | Details |
Total release size: 34.9 kB
Release files / pers-0.2.2.tar.gz
| Download URL | pers-0.2.2.tar.gz |
|---|---|
| Size | 17.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c2d295e859524227e25dee94bd199bd128a352c0d2d3fa27b2582bbcb272f367
|
|
BLAKE2b-256 checksum How to use checksums |
9cb2706f57d751da68f4928e85d843962649577300fa10fa52cbb687b6e5a630
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.10.10
|
Release files / pers-0.2.2-py2.py3-none-any.whl
| Download URL | pers-0.2.2-py2.py3-none-any.whl |
|---|---|
| Size | 17.0 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
e255bb1c6143ce1586d15e96ebee36d4239d95436642582053cdf164697d4372
|
|
BLAKE2b-256 checksum How to use checksums |
40bd73fa3a4cdd4d18ec1809db2f561f5449ab1531f474c644b802a226b99966
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.10.10
|