SORU
13 NİSAN 2010, Salı


Python 100.000 HTTP istekleri göndermek için en hızlı yolu nedir?

100,000 url olan bir dosya açıyorum. Her url bir http isteği göndermek için ihtiyacım var ve durum kodunu yazdırın. Python 2.6 ve şimdiye kadar parçacığı/eşzamanlılık Python uygulayan birçok kafa karıştırıcı şekilde baktı kullanıyorum. Hatta python concurrence kütüphane baktım, ama bu program düzgün yazmayı Öğren. Herkes benzer bir sorunu geçti? Python görevleri mümkün olduğunca hızlı binlerce gerçekleştirmek için nasıl bilmek istiyorum genelde sanırım - sanırım ''. aynı anda

Teşekkür ederim, Igor

CEVAP
14 NİSAN 2010, ÇARŞAMBA


Twistedless çözüm:

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)

Bu çarpık çözüm slighty daha hızlı ve daha az CPU kullanır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Adam Washington

    Adam Washing

    12 Mayıs 2006
  • HowcastSportsFitness

    HowcastSport

    11 Mayıs 2011
  • SaMmM123

    SaMmM123

    3 Mayıs 2006