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

  • BetterCoder

    BetterCoder

    17 Aralık 2012
  • funbro1

    funbro1

    11 Aralık 2007
  • wwjoshdew

    wwjoshdew

    1 AĞUSTOS 2007