Para reducir el tiempo de desarrollo de mi aplicación web basada en Python, estoy intentando usar reload() para los módulos que he modificado recientemente. La recarga() ocurre a través de una página web dedicada (parte de la versión de desarrollo de la aplicación web) que enumera los módulos que se han modificado recientemente (y la marca de tiempo modificada del archivo py es posterior al archivo pyc correspondiente). La lista completa de módulos se obtiene de sys.modules (y filtro la lista para enfocarme solo en aquellos módulos que son parte de mi paquete).cómo encontrar la lista de módulos que dependen de un módulo específico en python
La recarga de archivos individuales de python parece funcionar en algunos casos y no en otros. Supongo que todos los módulos que dependen de un módulo modificado deberían volver a cargarse y la recarga debería realizarse en el orden correcto.
Estoy buscando una forma de obtener la lista de módulos importados por un módulo específico. ¿Hay alguna manera de hacer este tipo de introspección en Python?
Entiendo que mi enfoque podría no estar 100% garantizado y la forma más segura sería volver a cargar todo, pero si un enfoque rápido funciona en la mayoría de los casos, sería suficiente para fines de desarrollo.
Respuesta a los comentarios respecto DJango autoreloader
@Glenn Maynard, Gracias, había leído sobre autoreloader de Django. Mi aplicación web se basa en Zope 3 y con la cantidad de paquetes y muchas inicializaciones basadas en ZCML, el reinicio total tarda de 10 segundos a 30 segundos o más si el tamaño de la base de datos es más grande. Estoy intentando reducir el tiempo que paso durante el reinicio. Cuando siento que he realizado muchos cambios, generalmente prefiero reiniciar por completo, pero con mayor frecuencia cambio algunas líneas aquí y allá para las que no deseo pasar tanto tiempo. La configuración de desarrollo es completamente independiente de la configuración de producción y, por lo general, si algo está mal en la recarga, se vuelve obvio ya que las páginas de la aplicación comienzan a mostrar información ilógica o arrojar excepciones. Estoy muy interesado en explorar si la recarga selectiva funcionaría o no.
Es mucho más seguro hacer algo como el autoreloader de Django, que vuelve a ejecutar el backend por completo cuando se modifica un archivo de origen. No sé de ninguna desventaja; modificas un archivo y todo se vuelve a cargar uno o dos segundos más tarde, automáticamente. Algo que solo funciona en "la mayoría de los casos" es muy malo para el desarrollo; solo pides que te muerdan dolorosamente en el camino cuando no es así. –
Revisando aquí debido a una pregunta duplicada, y agregando que "la manera de hacer minimizar el tiempo de recarga cuando se usa zope" es usar sauna.reload por ahora (2013) – jsbueno