2009-10-31 14 views
3

Je peux télécharger plusieurs fichiers assez rapidement avec beaucoup de threads à la fois, mais le problème est que, après quelques minutes, il a tendance à ralentir progressivement jusqu'à presque un arrêt complet, je ne sais pas pourquoi. Il n'y a rien de mal avec mon code que je peux voir et ma RAM/CPU est bien. La seule chose que je peux penser est que urllib2 ne gère pas la quantité massive de connexions correctement. Si cela aide, j'utilise des proxies mais j'ai eu ce problème sans eux aussi. Quelqu'un at-il des suggestions ou un aperçu de ce problème? Merci!Python MultiThreading avec Urllib2 Édition

Répondre

3

Pouvez-vous confirmer que faire le même nombre de téléchargements simultanés sans python continue à télécharger rapidement? Peut-être que le problème n'est pas avec votre code, mais avec votre connexion étranglée ou avec le site servant les fichiers.

Si ce n'est pas le problème, vous pouvez essayer la bibliothèque pyprocessing pour implémenter une version multi-processus au lieu d'une version multi-thread. Si vous utilisez python 2.6 pyprocessing est inclus dans la distribution sous la forme multiprocessing. Il est assez facile de convertir du code threadé en code multi-process, il vaut donc la peine d'essayer si ce n'est que pour confirmer que le problème est lié au thread.

1

Comme une autre réponse suggérée, le problème peut provenir de votre connexion ou du site qui traite les fichiers. Si vous pouvez exécuter votre code localement sur un serveur de test, vous pourrez l'éliminer.

Si le problème disparaît lors de l'utilisation du serveur de test, le problème provient de votre connexion ou du serveur distant. Si le problème persiste lors de l'utilisation du serveur de test, cela ressemble plus à quelque chose dans votre code, mais vous aurez au moins les journaux du serveur pour vous donner une meilleure idée de ce qui se passe.

Comme pour une autre avenue que vous pouvez explorer, this thread suggère d'utiliser httplib2 au lieu de urllib2.