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)
Penjelasan:
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!