Too many open files

Python Erreur courante

Explication

L'erreur `OSError: [Errno 24] Too many open files` survient quand le processus dépasse la **limite du système d'exploitation** sur le nombre de descripteurs de fichiers ouverts simultanément. La cause habituelle : des fichiers ou des connexions ouverts dans une boucle sans jamais être fermés. ```python fichiers = [] for i in range(100000): fichiers.append(open(f"f{i}.txt")) # jamais fermés → fuite de descripteurs # OSError: [Errno 24] Too many open files ```

Causes courantes

- **Fichiers ouverts sans être fermés** (pas de `with`, pas de `close()`). - **Connexions réseau / sockets** non libérées. - **Fuite de descripteurs** dans une boucle longue. - **Limite système basse** (`ulimit -n`).

1. Utilisez with pour fermer automatiquement

for i in range(100000):
    with open(f"f{i}.txt") as f:   # ✅ fermé à la fin du bloc
        traiter(f.read())

2. Réutilisez les connexions (pooling)

Pour les requêtes HTTP, une Session réutilise les connexions au lieu d'en ouvrir une par appel :

import requests
with requests.Session() as s:
    for url in urls:
        s.get(url)

3. Augmentez la limite si elle est légitimement atteinte

ulimit -n 4096   # Linux/macOS : relever la limite de descripteurs

Comment prevenir cette erreur

- **Ouvrez toujours avec `with`** pour garantir la fermeture. - **Limitez la concurrence** et réutilisez les connexions (pools, sessions). - Vérifiez `ulimit -n` sur les serveurs traitant beaucoup de fichiers/connexions. - Référence : [docs.python.org — open](https://docs.python.org/fr/3/library/functions.html#open).

Besoin d'aide sur votre projet ?

Besoin d'aide sur un probleme technique ? Decrivez-le pour des recommandations.

Nous contacter

Questions frequentes

Comment savoir si j'ai une fuite de descripteurs ?
Si l'erreur apparaît après un long fonctionnement ou de nombreuses itérations, c'est une fuite : cherchez des `open(...)` ou des connexions sans `with`/`close`. Sous Linux, `lsof -p | wc -l` compte les descripteurs ouverts.
`with` ferme-t-il vraiment le fichier même en cas d'erreur ?
Oui : le bloc `with` garantit la fermeture du fichier à la sortie, qu'elle soit normale ou provoquée par une exception. C'est la raison principale de le préférer.

Erreurs similaires

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.