2009-12-30 13 views
0

J'ai vu quelques threads downloaders en ligne, et même quelques multi-part downloaders (HTTP). Je ne les ai pas vus ensemble en tant que classe/fonction.Un téléchargeur multi-parties/threadé via python?

Si l'un d'entre vous a une classe/fonction qui traîne, que je peux simplement tomber dans l'une de mes applications où j'ai besoin de saisir plusieurs fichiers, je serais très obligé.

S'il y a une bibliothèque/framework (ou un backend d'un programme) qui fait cela, merci de me diriger vers celui-ci?

Répondre

1

Threadpool par Christopher Arndt peut être ce que vous cherchez. J'ai utilisé this "cadre de thread thread orienté objet facile à utiliser" pour le but exact que vous décrivez et cela fonctionne très bien. Voir le usage examples en bas sur la page liée. Et c'est vraiment facile à utiliser: il suffit de définir trois fonctions (dont l'une est un gestionnaire d'exceptions optionnel à la place du gestionnaire par défaut) et vous êtes sur votre chemin.

de http://www.chrisarndt.de/projects/threadpool/:

  • orientée objet, conception réutilisable
  • Fournit mécanisme de rappel pour traiter les résultats car ils sont renvoyés des threads de travail.
  • Les objets WorkRequest enveloppent les tâches affectées aux threads de travail et permettent de transmettre facilement des données arbitraires aux rappels.
  • L'utilisation de la classe Queue résout la plupart des problèmes de verrouillage.
  • Tous les threads de travail sont démoniaques, donc ils sortent quand le programme principal se termine, pas besoin de se joindre.
  • Les threads commencent à s'exécuter dès que vous les créez. Pas besoin de les démarrer ou de les arrêter. Vous pouvez augmenter ou diminuer la taille du pool à tout moment, les threads superflus sortiront juste quand ils auront terminé leur tâche en cours.
  • Vous n'avez pas besoin de conserver une référence à un thread après l'avoir affecté à la dernière tâche. Vous dites simplement: "ne revenez pas à la recherche d'un travail, quand vous avez fini!"
  • Les threads ne mangent pas de cycles en attendant d'être assignés à une tâche, ils bloquent simplement lorsque la file d'attente de tâches est vide (bien qu'ils se réveillent toutes les quelques secondes pour vérifier s'ils sont rejetés).

Aussi disponible à http://pypi.python.org/pypi/threadpool, easy_install, ou en tant que check subversion (voir page d'accueil du projet).

+0

Utilisé cela plus urllib - mais je suis passé à tordu plus tard. – torger