2009-02-20 12 views
7

Ho un modulo che utilizza i tipi ctyp per racchiudere alcune funzionalità da una libreria statica in una classe. Quando il modulo viene caricato, richiama una funzione di inizializzazione nella libreria statica. Quando il modulo viene scaricato (presumibilmente quando l'interprete esce), c'è una funzione di scarico nella libreria che vorrei essere chiamata. Come posso creare questo gancio?Rileva quando un modulo Python scarica

risposta

13

utilizza il modulo atexit:

import mymodule 
import atexit 

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

Un altro semplice esempio dai documenti, utilizzando register come decoratore: (?)

import atexit 

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

atexit può essere una soluzione scomoda/sporco, soprattutto se il forche di processo, ecc. Forse è meglio saltare la magia e fornire una funzione di "pulizia/finalizzazione" che l'utente del modulo dovrebbe chiamare? – u0b34a0f6ae

+0

se si 'fork'ed si desidera pulire anche il processo figlio, poiché condividerà tutte le strutture di memoria. – nosklo

+0

C'è un modo per cogliere il momento in cui il modulo si scarica a causa di qualche altra circostanza? (Ad es., Se viene chiamato un 'reload '?) – max