Dans le pickle module documentation il y a un extrait de l'exemple de code:durée de python d'un objet de fichier dans une liste d'arguments
reader = pickle.load(open('save.p', 'rb'))
qui lors de la première lecture semblait allouera un descripteur de fichier système, lire son contenu, puis "fuite" le descripteur ouvert car il n'y a pas de poignée accessible pour appeler close()
. Cela m'a fait me demander s'il y avait une magie cachée qui s'occupe de cette affaire.
En plongeant dans la source, j'ai trouvé dans Modules/_fileio.c que les descripteurs de fichiers sont fermés par le destructeur fileio_dealloc() qui a conduit à la vraie question.
Quelle est la durée de l'objet fichier utilisé par l'exemple de code ci-dessus? Après que cette instruction s'exécute, l'objet devient-il effectivement non référencé et, par conséquent, le fd sera-t-il sujet à un appel close(2)
réel lors d'un balayage futur de la récupération de place? Si oui, est-ce que la ligne d'exemple est une bonne pratique, ou ne devrait-on pas compter sur le fait que le fd soit libéré, risquant ainsi l'épuisement de la table de descripteurs par processus du noyau?
merci beaucoup; vous aviez raison, je voulais dire "utilisé" plutôt que "retourné" et édité pour réparer. – msw