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个线程有点多,开销大也会造成效率低,可以采用线程池来执行批量任务。