[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