最近在学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()的注释执行,发现时间几乎没有差别,请问是怎么回事呢?比如说我现在要多线程获取百度首页,究竟应该是怎么写代码呢?
这是执行结果,下面是多线程,上面是单线程
欧阳克2016-11-11 16:37:19
multi的join位置写错了。应该在for外面去join;
这个join如第一个评论所说的,主线程等待子线程完成;你放到for里面,start一个子线程,
然后就去join,这个就阻塞了。没法进行start下一个多线程。