2009-02-20 19 views
7

Tengo un módulo que usa ctypes para envolver algunas funcionalidades de una biblioteca estática en una clase. Cuando el módulo se carga, llama a una función de inicialización en la biblioteca estática. Cuando el módulo está descargado (presumiblemente cuando sale el intérprete), hay una función de descarga en la biblioteca a la que me gustaría llamar. ¿Cómo puedo crear este gancho?Detecta cuando un módulo de Python se descarga

Respuesta

13

utilizar el módulo atexit:

import mymodule 
import atexit 

# call mymodule.unload('param1', 'param2') when the interpreter exits: 
atexit.register(mymodule.unload, 'param1', 'param2') 

Otro ejemplo simple de la documentación, utilizando register como decorador: (?)

import atexit 

@atexit.register 
def goodbye(): 
    print "You are now leaving the Python sector." 
+0

atexit puede ser una solución inconveniente/impuro, especialmente si el horquillas de proceso, etc. ¿Tal vez es mejor omitir la magia y proporcionar una función de "limpieza"/finalización que el usuario del módulo debería llamar? – u0b34a0f6ae

+0

si 'fork'ed desea limpiar el proceso secundario también, ya que compartirá todas las estructuras de memoria. – nosklo

+0

¿Hay alguna forma de detectar el momento en que el módulo se descarga debido a alguna otra circunstancia? (Por ejemplo, si se llama a 'reload'?) – max

Cuestiones relacionadas