I wrote Python script that processes big number of large text files and may run a lot of time. Sometimes, there is a need to stop the running script and to
The execution could sleep it's life away, or (aside from the exceptions of security), the state of the script can be pickled, zipped, and stored.
http://docs.python.org/library/pickle.html
http://docs.python.org/library/marshal.html
http://docs.python.org/library/stdtypes.html (5.9)
http://docs.python.org/library/archiving.html
http://www.henrysmac.org/?p=531
Here is something simple that hopefully can help you:
import time
import pickle
REGISTRY = None
def main(start=0):
"""Do some heavy work ..."""
global REGISTRY
a = start
while 1:
time.sleep(1)
a += 1
print a
REGISTRY = pickle.dumps(a)
if __name__ == '__main__':
print "To stop the script execution type CTRL-C"
while 1:
start = pickle.loads(REGISTRY) if REGISTRY else 0
try:
main(start=start)
except KeyboardInterrupt:
resume = raw_input('If you want to continue type the letter c:')
if resume != 'c':
break
Example of running:
$ python test.py
To stop the script execution type CTRL-C
1
2
3
^CIf you want to continue type the letter c:c
4
5
6
7
8
9
^CIf you want to continue type the letter c:
$ python test.py
If you are looking to read big files, just use a file handle, and read the lines one at a time, processing each line as you need to. If you'd like to save the python session, then just use dill.dump_session -- and it will save all existing objects. Other answers will fail as pickle cannot pickle a file handle. dill, however, can serialize almost every python object -- including a file handle.
Python 2.7.9 (default, Dec 11 2014, 01:21:43)
[GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import dill
>>> f = open('bigfile1.dat', 'r')
>>> data = f.readline()
>>>
>>> dill.dump_session('session.pkl')
>>>
Then quit the python session, and restart. When you load_session, you load all the objects that existed at the time of the dump_session call.
dude@hilbert>$ python
Python 2.7.9 (default, Dec 11 2014, 01:21:43)
[GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import dill
>>> dill.load_session('session.pkl')
>>> len(data)
9
>>> data += f.readline()
>>> f.close()
>>>
Simple as that.
Get dill here: https://github.com/uqfoundation