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

  • ☆ SUB4SUB CENTER! ☆ spam here

    ☆ SUB4SUB

    22 ŞUBAT 2010
  • Kanál používateľa McsFuego

    Kanál použ

    12 EKİM 2011
  • SVB International

    SVB Internat

    29 EKİM 2011