最近在学python的多线程,写了一个这样的代码,发现多线程和单线程的执行速度是一样的啊。我现在觉得问题是join这里,下面是代码,请各位高手帮我看看这是神马情况?
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import urllib2
import urllib
import threading
import time
start_time = 0
end_time = 0
def fetch():
req = urllib2.Request('http://www.baidu.com')
response = urllib2.urlopen(req)
#获取提交后返回的信息
content = response.read()
# print content
end_time = time.time()
print '\nFinished in ' + str(end_time - start_time) + 's'
def single():
for x in xrange(20):
fetch()
def multi():
for x in xrange(20):
t = threading.Thread(target=fetch)
t.start()
t.join()
if __name__ == '__main__':
start_time = time.time()
multi() # 多线程
# single() # 单线程
end_time = time.time()
print '\nFinished in ' + str(end_time - start_time) + 's'
就这段代码,在if name == '__main__':中切换multi()和single()的注释执行,发现时间几乎没有差别,请问是怎么回事呢?比如说我现在要多线程获取百度首页,究竟应该是怎么写代码呢?
这是执行结果,下面是多线程,上面是单线程
t.join() 会阻塞主线程,直至分线程结束,其实就是变回单线程了
#t.join()
把这句注释就行了~