Un moyen plus Rapide de Répertoire de marche de la place de l'os.listdir?

Je suis en train d'améliorer les performances de elfinder , un ajax basé sur le gestionnaire de fichiers(elRTE.ru) .

Il utilise le système d'exploitation.listdir dans un recurisve de marcher à travers tous les répertoires de manière récursive et avoir un gain de performance (comme la liste des dir avec 3000 + fichiers prend 7 secondes ) ..

Je suis en train d'améliorer les performances pour elle ici c'est que c'est la marche de la fonction:

        for d in os.listdir(path):
            pd = os.path.join(path, d)
            if os.path.isdir(pd) and not os.path.islink(pd) and self.__isAccepted(d):
                tree['dirs'].append(self.__tree(pd))

Mes questions sont :

  1. Si je change d'os.à pied au lieu de l'os.listdir , serait-il améliorer les performances?
  2. comment sur l'utilisation de dircache.listdir() ? cache de TOUT le répertoire/subdir contenu à la demande initiale et de retourner mettre en cache les résultats , si tu n'as pas de nouveaux fichiers téléchargés ou pas de modifications dans le fichier?
  3. Est-il de toute autre méthode de Répertoire de la marche qui est le plus rapide?
  4. N'importe quel Autre Serveur de fichiers Côté navigateur qui est rapide, écrit en python (mais je préfère le faire de cette rapide)?
De quoi êtes-vous à l'aide de ces données? Si vous pouvez vous permettre de faire la récursivité paresseusement (uniquement appel os.listdir() quand vous avez besoin le contenu, pas automatiquement lorsque vous trouvez un nouveau répertoire), alors vous pouvez amortir le coût sur de nombreuses requêtes. C'est la façon dont la plupart des gestionnaires de fichiers de travail dans la pratique.
Ces données sont pour une base d'ajax filemanager , appelé elfinder de elrte.ru . c'est joli mais le problème est trop lent en raison de la fonction que j'ai collé. Vôtre l'on regarde de pratique , je vais le changer de look pour chaque répertoire au lieu de l'ensemble de la recursiely.
os.walk() ne sera pas plus rapide que la marche à la fonction, parce qu'ils ne la plupart les mêmes choses. os.walk() utilisation os.listdir(), os.pathisdir(), etc. Vérifiez le code de os.walk() et, vous verrez!
2017 mise à jour: beaucoup d'informations sont obsolètes, ici et maintenant. À savoir, os.walk n'utilise plus listdir, maintenant, c'est l'aide la plus rapide scandir.
la version sur laquelle elle a commencé à utiliser? Pas disponible en 2.7 droit ?

OriginalL'auteur Phyo Arkar Lwin | 2010-07-01