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

  • Dan Gately

    Dan Gately

    13 AĞUSTOS 2006
  • discokatze

    discokatze

    23 EYLÜL 2009
  • Top10Series

    Top10Series

    26 Kasım 2008