首页 > Python多线程获取网页数据为何速度提升不上去呢?

Python多线程获取网页数据为何速度提升不上去呢?

Python代码如下

# -*- coding: utf-8 -*-
import urllib2,urllib
import threading     #多线程模块
import time, random
import sys
from bs4 import *
class MyThread(threading.Thread):
    def __init__( self, url ):
        threading.Thread.__init__( self )        
        self.url  = url

    '''vertual function in Thread'''
    def run( self ):
        try:
            urllib.urlcleanup()    #清除使用urlopen后产生的缓存文件
            req = urllib2.Request(self.url)
            response = urllib2.urlopen(req,None)     #3秒超时
            html = response.read()
            soup = BeautifulSoup(html)
            print str(self.url) + ">>>" + str(soup.title) + "\n"
        except:
            print "run函数出错..."

#main函数入口
if __name__ == "__main__":
    tasks = []
    #创建线程对象
    for i in range(0,100):
        task = MyThread( "http://www.baidu.com" )
        tasks.append( task )

    # 启动所有的线程
    for t in tasks:
        t.start()

    # 主线程中等待所有子线程退出
    for t in tasks:
        t.join()

获取百度首页标题100次所花费的时间:

注:刚接触Python多线程机制,不知道使用上有没有错误,以上代码该怎样修改才能进一步提升速度呢?


首先python的线程由于GIL的限制 效率不会特别高,为了效率可以考虑多进程或线程进程混合。其次 100个线程有点多,开销大也会造成效率低,可以采用线程池来执行批量任务。

【热门文章】
【热门文章】