[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