[PIPython] checkpointing python

Mauro Tortonesi mtortonesi
Mar 18 Gen 2005 21:57:19 CET


salve a tutti,

stavo facendo qualche prova per vedere se è possibile effettuare un completo 
checkpointing di uno script python in modo tale da poterlo sospendere e 
riprendere ad ogni istante.

ecco il codice che ho prodotto dopo una quindicina di minuti di test:

#!/usr/bin/env python

from inspect import *

def pippo():
    x = 1
    frame = currentframe()
    print getframeinfo(frame)
    for i in getouterframes(frame)[:-1]:
        print getframeinfo(i[0])
        print dir(i[0])
        #if hasattr(i[0], 'f_globals'):
        #    print i[0].f_globals
        if hasattr(i[0], 'f_globals'):
            for j in i[0].f_globals:
                # filtraggio...
                if not (ismodule(j) or isclass(j) or ismethod(j) or 
                        isfunction(j) or istraceback(j) or isframe(j) or
                        iscode(j) or isbuiltin(j) or isroutine(j) or
                        ismethoddescriptor(j) or isdatadescriptor(j)):
                    print j
        if hasattr(i[0], 'f_locals'):
            for j in i[0].f_locals:
                if (j[0] != 'i'):
                    print j


if __name__ == "__main__":
    a = 15
    b = "pluto"
    pippo()
	
# vim: et ts=4 sw=4 

e il risultato è:

('./pytest2.py', 13, 'pippo', ['    print getframeinfo(frame)\n'], 0)
('./pytest2.py', 15, 'pippo', ['        print getframeinfo(i[0])\n'], 0)
['__class__', '__delattr__', '__doc__', '__getattribute__', '__hash__', 
'__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', 
'__setattr__', '__str__', 'f_back', 'f_builtins', 'f_code', 
'f_exc_traceback', 'f_exc_type', 'f_exc_value', 'f_globals', 'f_lasti', 
'f_lineno', 'f_locals', 'f_restricted', 'f_trace']
formatargvalues
isdatadescriptor
getinnerframes
indentsize
getmodulename
pippo
sys
a
getfile
iscode
getsource
formatargspec
getabsfile
getsourcelines
string
CO_OPTIMIZED
isbuiltin
getlineno
re
CO_VARKEYWORDS
isclass
findsource
isframe
CO_VARARGS
ListReader
getargvalues
tokenize
BlockFinder
isfunction
getargspec
__doc__
currentframe
getclasstree
getmoduleinfo
trace
getframeinfo
__builtins__
__file__
getmembers
ismethoddescriptor
CO_NEWLOCALS
isroutine
strseq
imp
__name__
getmro
getargs
stack
types
getdoc
getcomments
joinseq
b
classify_class_attrs
ismodule
getouterframes
walktree
dis
modulesbyfile
linecache
getmodule
EndOfBlock
getsourcefile
ismethod
os
istraceback
getblock
x
frame
j

quello che mi rimane ancora da fare (sempre che sia possibile) è:

- eliminare le cose inutili che mi vengono restituite in f_globals (come? mi 
sarei aspettato un numero molto inferiore di oggetti restituiti da f_globals 
dopo il filtraggio...)
- trovare un modo di salvare e ripristinare stack ed instruction pointer (ad 
esempio eseguire il dump di currentframe() e poi ripristinarlo?)

avete qualche suggerimento?

-- 
Aequam memento rebus in arduis servare mentem...

Mauro Tortonesi

University of Ferrara - Dept. of Eng.    http://www.ing.unife.it
Institute of Human & Machine Cognition   http://www.ihmc.us
Deep Space 6 - IPv6 for Linux            http://www.deepspace6.net
Ferrara Linux User Group                 http://www.ferrara.linux.it


More information about the Python mailing list