2010-08-10 5 views
2

Je lis de certains décalages dans plusieurs centaines et peut-être des milliers de fichiers. Étant donné que je n'ai besoin que de certaines données de certains décalages à ce moment particulier, je dois garder le fichier ouvert pour une utilisation ultérieure OU je peux écrire les parties dont j'ai besoin dans des fichiers séparés. J'ai pensé garder toutes ces poignées de fichiers ouvertes plutôt que de faire une quantité importante d'écriture sur le disque de nouveaux fichiers temporaires est le moindre de deux maux. J'étais juste inquiet au sujet de l'efficacité d'avoir tant de poignées ouvertes.Avoir plusieurs pointeurs de fichiers ouverts simultanément?

Typiquement, je vais ouvrir un fichier, chercher un décalage, lire quelques données, puis 5 secondes plus tard faire la même chose mais à un autre décalage, et faire tout cela sur des milliers de fichiers dans un délai de 2 minutes.

Est-ce que ça va être un problème?

Un suivi: Vraiment, je "m demander ce qui est mieux de laisser ces fichiers des milliers poignées ouvertes ou pour fermer en permanence et de les rouvrir juste au moment où j'ai besoin instantanément les

+0

Ne mettez pas '[python]' dans le titre, c'est à ça que servent les balises. – Amber

+0

Puisque c'est ce que font les bases de données comme Oracle, je ne sais pas pourquoi vous demandez. –

Répondre

4

Certains systèmes peuvent limiter la. nombre de descripteurs de fichier qu'un seul processus peut ouvrir simultanément 1024 est une valeur par défaut courante, donc si vous avez besoin de "milliers" ouverts à la fois, vous pouvez préférer utiliser le port des descripteurs de fichier ouverts

+0

donc c'est mieux d'ouvrir et de refermer des milliers de fichiers, plutôt que de les laisser ouverts? Je pensais que je pourrais gagner en efficacité si je ne les fermais pas et ne les rouvrais pas. – ruffiko

+0

@ruffiko: C'est difficile à dire, sans en savoir plus sur votre application spécifique. Il se peut que la façon dont vous le faites fonctionne le mieux pour votre situation. Mais garder des milliers de fichiers ouverts à la fois me semble être une «odeur de code» qui mériterait d'être examinée de plus près. Je suggère d'écrire un programme de benchmark simple pour voir combien de frais généraux sont encourus en ouvrant/fermant plusieurs milliers de fichiers à plusieurs reprises. Pourquoi deviner, quand vous pouvez mesurer? –

3

Je vous recommande de jeter un oeil à Storage.py dans BitTorrent. d'un pool de handles de fichiers.

Questions connexes