Maison > développement back-end > Tutoriel Python > Comment puis-je optimiser l'envoi des requêtes HTTP pour 100 000 URL dans Python 2.6 ?

Comment puis-je optimiser l'envoi des requêtes HTTP pour 100 000 URL dans Python 2.6 ?

Susan Sarandon
Libérer: 2024-11-17 16:27:02
original
1021 Les gens l'ont consulté

How can I optimize HTTP request dispatch for 100,000 URLs in Python 2.6?

Optimisation de la répartition des requêtes HTTP en Python

La gestion des requêtes HTTP à grande échelle peut poser un défi en Python, en particulier pour les tâches impliquant des milliers d'URL . Cet article explore une solution très efficace pour distribuer 100 000 requêtes HTTP dans Python 2.6, en tirant parti de la concurrence et du threading pour maximiser les performances.

Solution Twistedless :

L'extrait de code suivant fournit une méthode rapide et efficace pour envoyer des requêtes HTTP simultanément :

from urlparse import urlparse
from threading import Thread
import httplib, sys
from Queue import Queue

concurrent = 200

def doWork():
    while True:
        url = q.get()
        status, url = getStatus(url)
        doSomethingWithResult(status, url)
        q.task_done()

def getStatus(ourl):
    try:
        url = urlparse(ourl)
        conn = httplib.HTTPConnection(url.netloc)   
        conn.request("HEAD", url.path)
        res = conn.getresponse()
        return res.status, ourl
    except:
        return "error", ourl

def doSomethingWithResult(status, url):
    print status, url

q = Queue(concurrent * 2)
for i in range(concurrent):
    t = Thread(target=doWork)
    t.daemon = True
    t.start()
try:
    for url in open('urllist.txt'):
        q.put(url.strip())
    q.join()
except KeyboardInterrupt:
    sys.exit(1)
Copier après la connexion

Explication :

  • Un pool de threads est créé avec un niveau de concurrence configurable (en dans ce cas, 200).
  • Chaque thread du pool exécute la fonction doWork, qui récupère les URL d'une file d'attente et envoie des requêtes HTTP HEAD pour obtenir des codes d'état.
  • Les résultats sont traités dans le Fonction doSomethingWithResult, qui peut être personnalisée pour enregistrer ou effectuer d'autres opérations en fonction de la réponse.
  • La file d'attente garantit que les tâches sont réparties uniformément entre les threads, minimisant les conflits et augmentant le débit.

Cette approche s'est avérée plus rapide que la solution basée sur Twisted tout en réduisant également l'utilisation du processeur. Il fournit un moyen très efficace et fiable de gérer les requêtes HTTP à grande échelle dans Python 2.6.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal