Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah saya boleh mengoptimumkan penghantaran permintaan HTTP untuk 100,000 URL dalam Python 2.6?

Bagaimanakah saya boleh mengoptimumkan penghantaran permintaan HTTP untuk 100,000 URL dalam Python 2.6?

Susan Sarandon
Lepaskan: 2024-11-17 16:27:02
asal
1000 orang telah melayarinya

How can I optimize HTTP request dispatch for 100,000 URLs in Python 2.6?

Mengoptimumkan Penghantaran Permintaan HTTP dalam Python

Mengendalikan permintaan HTTP berskala besar boleh menimbulkan cabaran dalam Python, terutamanya untuk tugas yang melibatkan beribu-ribu URL . Artikel ini meneroka penyelesaian yang sangat cekap untuk menghantar 100,000 permintaan HTTP dalam Python 2.6, memanfaatkan konkurensi dan penjalinan untuk memaksimumkan prestasi.

Penyelesaian Tanpa Twisted:

Coretan kod berikut menyediakan kaedah yang pantas dan berkesan untuk menghantar permintaan HTTP secara serentak:

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)
Salin selepas log masuk

Penjelasan:

  • Kolam benang dibuat dengan tahap konkurensi yang boleh dikonfigurasikan (dalam kes ini, 200).
  • Setiap urutan dalam kumpulan melaksanakan fungsi doWork, yang mengambil URL daripada baris gilir dan menghantar permintaan HTTP HEAD untuk mendapatkan kod status.
  • Hasilnya diproses dalam fungsi doSomethingWithResult, yang boleh disesuaikan untuk log atau melakukan operasi lain berdasarkan respons.
  • Baris gilir memastikan tugas diagihkan sama rata antara utas, meminimumkan perbalahan dan meningkatkan daya pengeluaran.

Pendekatan ini telah terbukti lebih pantas daripada penyelesaian berasaskan Twisted sambil juga mengurangkan penggunaan CPU. Ia menyediakan cara yang sangat cekap dan boleh dipercayai untuk mengendalikan permintaan HTTP berskala besar dalam Python 2.6.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengoptimumkan penghantaran permintaan HTTP untuk 100,000 URL dalam Python 2.6?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan