web爬网期间的速度问题(Python)

web爬网期间的速度问题(Python),python,performance,web-crawler,Python,Performance,Web Crawler,我希望这个程序在速度上有很大的提高。它能在10分钟内阅读+-12000页。我想知道是否有什么东西可以大大提高速度?我希望你们知道一些窍门。我应该读上百万页。。。所以这需要很长时间:(这是我的代码: from eventlet.green import urllib2 import httplib import time

我希望这个程序在速度上有很大的提高。它能在10分钟内阅读+-12000页。我想知道是否有什么东西可以大大提高速度?我希望你们知道一些窍门。我应该读上百万页。。。所以这需要很长时间:(这是我的代码:

from eventlet.green import urllib2                          
import httplib                                              
import time                                                 
import eventlet   

# Create the URLS in groups of 400 (+- max for eventlet)                                    
def web_CreateURLS():
    print str(str(time.asctime( time.localtime(time.time()) )).split(" ")[3])
    for var_indexURLS in xrange(0, 2000000, 400):
        var_URLS = []
        for var_indexCRAWL in xrange(var_indexURLS, var_indexURLS+400):
            var_URLS.append("http://www.nu.nl")
        web_ScanURLS(var_URLS)    

# Return the HTML Source per URL
def web_ReturnHTML(url):
    try:
        return [urllib2.urlopen(url[0]).read(), url[1]]
    except urllib2.URLError:
        time.sleep(10)
        print "UrlError"
        web_ReturnHTML(url)

# Analyse the HTML Source
def web_ScanURLS(var_URLS):
    pool = eventlet.GreenPool()
    try:  
        for var_HTML in pool.imap(web_ReturnHTML, var_URLS):
               # do something etc..
    except TypeError: pass

web_CreateURLS()

我喜欢使用greenlets。但是我经常受益于使用分布在许多系统上的多个进程。或者只使用一个系统,让操作系统负责运行多个进程的所有检查和平衡

查看ZeroMQ at,了解一些关于如何使调度器具有大量侦听器的好例子,这些侦听器可以执行调度器所说的任何操作。或者,查看execnet,了解一种快速开始并行执行远程或本地任务的方法

我还使用了很多,并且有很多系统监听一个通用的spread守护进程。这是一个非常有用的消息总线,在这里,结果可以很容易地汇集到单个线程并从单个线程进行调度

当然,还有redis发布/订阅或同步:


“共享负载”

我喜欢使用greenlet。。但我经常受益于在许多系统中使用多个进程。。或者只是一个系统,让操作系统负责运行多个进程的所有检查和平衡

查看zeromqat,了解一些关于如何使调度器具有大量侦听器的好例子,这些侦听器可以执行调度器所说的任何操作。或者,也可以查看execnet,了解一种快速开始并行执行远程或本地任务的方法

我还使用了很多,并且有很多系统监听一个通用的spread守护进程。。它是一个非常有用的消息总线,在这里,结果可以很容易地汇集到单个线程并从单个线程进行调度

当然,还有redis发布/订阅或同步:


“共享负载”

您似乎每秒获取20个URL,每个请求平均耗时50毫秒。该页面似乎是81K。因此,您当前的网络吞吐量是1.58mbps。要实现100倍的增长(10分钟120万次),您必须提出100倍的请求。这将需要158mbps的连接,您将每秒发出2000个请求。这在我看来是不可能的。可能……只是在普通的住宅网络连接上不可能。此外,这可能被理解为对Web服务器的DoS攻击。您似乎每秒获取20个URL,每个请求平均耗时50毫秒。该页面似乎是81K。因此,您当前的网络吞吐量是1.58mbps。要实现100倍的增长(10分钟120万次),您必须提出100倍的请求。这将需要158mbps的连接,您将每秒发出2000个请求。这在我看来是不可能的。可能……只是在普通的住宅网络连接上不可能。另外,它可能被解释为对Web服务器的DoS攻击。