在Python中发送100,000个HTTP请求的最快方法是什么?

问题:

我打开一个有100,000个url的文件。我需要向每个网址发送http请求并打印状态码。我使用的是Python 2.6,到目前为止,Python已经看到许多令人困惑的方式来实现线程/并发。我甚至看过python concurrence库,但是无法弄清楚如何正确地写这个程序。有人遇到类似的问题吗?我想通常我需要知道如何在Python中尽可能快地执行数千个任务 – 我想这意味着“同时”。
谢谢,
伊戈尔

回答:

双绞线解决方案:

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)

这一个比扭转解决方案稍微快一点,使用较少的CPU。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: What is the fastest way to send 100,000 HTTP requests in Python?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

4 + 2 =