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

  • BlackBoxTV

    BlackBoxTV

    7 Mayıs 2007
  • lifeisforsharingDT

    lifeisforsha

    18 Mayıs 2011
  • TotalSeminarsChannel

    TotalSeminar

    16 Mart 2010