java - python多线程的join起什么作用

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

这是执行结果,下面是多线程,上面是单线程

解决方案

t.join() 会阻塞主线程,直至分线程结束,其实就是变回单线程了

#t.join() 把这句注释就行了~


那请问如果我希望所有子线程都等执行最慢的那个子线程结束之后在到主线程上,怎么弄啊?

@昌维001

def multi():
    thds = [threading.Thread(target=fetch) for x in xrange(20)]
    for t in thds: t.start()
    for t in thds: t.join()

这篇关于java - python多线程的join起什么作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆