[pyar] Llamadas dinamicas resueltas en tiempo de ejecucion

Juan A. Diaz juan en linux.org.ar
Jue Feb 17 14:45:25 ART 2011


On Thu, 2011-02-17 at 16:28 +0100, Leonardo M. Rocha wrote: 
> 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
> 
> 

Esto[0] no es un builtin pero quizás agregar esto a tu proyecto podría
ayudarte a lograr (lo que creo) estas necesitando. 

[0] http://pypi.python.org/pypi/zope.interface

Saludos..

nueces...




More information about the pyar mailing list