Tengo una función python que tiene un resultado determinista. Se necesita mucho tiempo para correr y genera una gran salida:Hashing una función python para regenerar la salida cuando se modifica la función
def time_consuming_function():
# lots_of_computing_time to come up with the_result
return the_result
modifico time_consuming_function
de vez en cuando, pero me gustaría evitar tener que correr de nuevo, mientras que es sin cambios. [time_consuming_function
solo depende de las funciones que son inmutables para los fines considerados aquí; es decir, podría tener funciones de las bibliotecas de Python, pero no de otras partes de mi código que cambiaría.] La solución que me sugiere a mí mismo es almacenar en caché el resultado y también almacenar en caché algún "hash" de la función. Si el hash cambia, la función habrá sido modificada, y tenemos que volver a generar la salida.
¿Es esto posible o ridículo?
Actualizado: basado en las respuestas, parece que lo que quiero hacer es "memoize" time_consuming_function
, pero en lugar de (o además de) los argumentos pasado a una función invariante, quiero cuenta para una función que a su vez cambiará.
+1 por un problema interesante. – zdav
¿Cómo se modifica el método? ¿Desea mantener hash en las ejecuciones del programa o está dentro de una ejecución pero en algunas recargas de módulos? – doublep
Tendría el método en un archivo de script; Probablemente lo modificaría a mano de vez en cuando. La aplicación es que esta función generaría "datos de problemas" para ejecutar en algún código de simulación. Cambiaría el problema de vez en cuando. –