python多线程的join起什么作用
高洛峰
高洛峰 2016-11-11 16:37:04
0
2
517

最近在学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()的注释执行,发现时间几乎没有差别,请问是怎么回事呢?比如说我现在要多线程获取百度首页,究竟应该是怎么写代码呢?

4045713931-5822bdd817fbf_articlex.png这是执行结果,下面是多线程,上面是单线程

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

reply all(2)
三叔

你把join去掉就行啦,让线程直接把结果存到数据库里面,或者使用多进程,协程等技术。

学霸

multi的join位置写错了。应该在for外面去join;
这个join如第一个评论所说的,主线程等待子线程完成;你放到for里面,start一个子线程,
然后就去join,这个就阻塞了。没法进行start下一个多线程。

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!