首页  >  问答  >  正文

python多线程的join起什么作用

最近在学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这是执行结果,下面是多线程,上面是单线程

高洛峰高洛峰2870 天前486

全部回复(2)我来回复

  • 三叔

    三叔2016-11-11 16:37:33

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

    回复
    0
  • 欧阳克

    欧阳克2016-11-11 16:37:19

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

    回复
    0
  • 取消回复