[pyar] Llamadas dinamicas resueltas en tiempo de ejecucion

Leonardo M. Rocha leo.m.rocha en gmail.com
Jue Feb 17 12:28:14 ART 2011


Holas,

Estoy trabajando (medio por fuera del trabajo) en un proyecto para
reconfiguracion dinamica de cadenas de procesamiento de datos
(reconfigurar basicamente desde los modulos, clases, parametrizacion,
orden de ejecucion, etc). Las pruebas las estoy realizando con modulos
escritos en OpenCV que son cargados en runtime de acuerdo a las
necesidades del sistema en el instante dado.
Estoy hablando con la gente para que me dejen liberarlo, pero las
negociaciones no van suficientemente bien (cuestiones de contrato ...
vieron). (Aca seria bueno tb que me tiraran una onda de que casos de
exito han tenido convenciendo a los jefes para liberar software)

La cuestion es que he encontrado algunas maneras de obtener de manera
dinamica las cosas que hay dentro de un objeto y decidir cual
utilizar.

Aca algunas:

Mediante el modulo inspect:
import inspect:
...
#para un plugin determinado obtengo la lista de elementos y las filtro
de acuerdo a una lista de metodos que se utilizan
processMethod = [i for i in inspect.getmembers(plugin) if i[0] in
processMethodCheck]

Lo anterior solo parece funcionar lindo para obtener los metodos de un objeto

Como Python guarda las "cosas" que tiene un objeto dentro de un
diccionario que lo representa de alguna manera, se me ocurrio
accederlo, llevando a esto:
Mediante la obtencion e inspeccion del diccionario del objeto (esto
solo para los elementos en un objeto) (aqui ejemplo)

In [91]: class C:
   ....:         def __init__(self):
   ....:             self.a = 1
   ....:             self.b = 2
   ....:             self.d = {'c':3, 'd':4}
   ....:             e = 1982
   ....:     def gete(self, element_name, element_type='d'):
   ....:         obj = None
   ....:         print "1"
   ....:         try:
   ....:             print "2"
   ....:             var = self.__dict__[element_type]# getting the
element I want from the dictionary
   ....:             print "var = "+ repr(var)
   ....:             obj = var[element_name] #O(1) average, O(n) worst case
   ....:             print "obj = "+ repr(obj)
   ....:         except:
   ....:             print "exception"
   ....:             obj = None
   ....:         return obj
   ....:

In [92]: c =C()

In [94]: c.__dict__
Out[94]: {'a': 1, 'b': 2, 'd': {'c': 3, 'd': 4}}

In [95]: c.gete('c')
1
2
var = {'c': 3, 'd': 4}
obj = 3
Out[95]: 3

In [96]: c.gete('d')
1
2
var = {'c': 3, 'd': 4}
obj = 4
Out[96]: 4

Las preguntas son las siguientes:

Que otras formas conocen para realizar este tipo de tareas? (mejor si
son mas sencillas, rapidas, estables, etc)

Que recomendarian? (cuales son las ventajas y desventajas de cada una)

No encontre comparaciones de velocidades, alguien tiene alguna idea de
como varian?
(no he tenido tiempo de hacer mediciones todavia, tengo unos cuantos
deadlines cerca, probablemente despues me siente a mejorar la
plataforma y seguir con el picado de sesos a ver si puedo liberarla)


Gracias,

Leo


-- 
Ing. Leonardo Manuel Rocha
Ingénieur Expert
INRIA Sophia Antipolis
Projet PULSAR
+33(0)49238 5007
leonardo.rocha en inria.fr



More information about the pyar mailing list